snt-voting/contracts/rlp/RLPHelper.sol
2018-09-25 09:22:57 -04:00

83 lines
2.7 KiB
Solidity

pragma solidity ^0.4.24;
/*
* Used to proxy function calls to the RLPReader for testing
*/
import "./RLPReader.sol";
contract RLPHelper {
using RLPReader for bytes;
using RLPReader for uint;
using RLPReader for RLPReader.RLPItem;
function isList(bytes memory item) public pure returns (bool) {
RLPReader.RLPItem memory rlpItem = item.toRlpItem();
return rlpItem.isList();
}
function itemLength(bytes memory item) public pure returns (uint) {
uint memPtr;
assembly {
memPtr := add(0x20, item)
}
return memPtr._itemLength();
}
function numItems(bytes memory item) public pure returns (uint) {
RLPReader.RLPItem memory rlpItem = item.toRlpItem();
return rlpItem.numItems();
}
function toBytes(bytes memory item) public pure returns (bytes) {
RLPReader.RLPItem memory rlpItem = item.toRlpItem();
return rlpItem.toBytes();
}
function toUint(bytes memory item) public pure returns (uint) {
RLPReader.RLPItem memory rlpItem = item.toRlpItem();
return rlpItem.toUint();
}
function toAddress(bytes memory item) public pure returns (address) {
RLPReader.RLPItem memory rlpItem = item.toRlpItem();
return rlpItem.toAddress();
}
function toBoolean(bytes memory item) public pure returns (bool) {
RLPReader.RLPItem memory rlpItem = item.toRlpItem();
return rlpItem.toBoolean();
}
function bytesToString(bytes memory item) public pure returns (string) {
RLPReader.RLPItem memory rlpItem = item.toRlpItem();
return string(rlpItem.toBytes());
}
/* custom destructuring */
/*function customDestructure(bytes memory item) public pure returns (address, bool, uint) {
// first three elements follow the return types in order. Ignore the rest
RLPReader.RLPItem[] memory items = item.toRlpItem().toList();
return (items[0].toAddress(), items[1].toBoolean(), items[2].toUint());
}
function customNestedDestructure(bytes memory item) public pure returns (address, uint) {
RLPReader.RLPItem[] memory items = item.toRlpItem().toList();
items = items[0].toList();
return (items[0].toAddress(), items[1].toUint());
}*/
//======================================
function pollTitle(bytes memory item) public pure returns (string) {
RLPReader.RLPItem[] memory items = item.toRlpItem().toList();
return string(items[0].toBytes());
}
function pollBallot(bytes memory item, uint ballotNum) public pure returns (string) {
RLPReader.RLPItem[] memory items = item.toRlpItem().toList();
items = items[1].toList();
return string(items[ballotNum].toBytes());
}
}