pragma solidity ^0.4.24; contract test { } contract test2 { mapping (uint256 => uint256[]) setIds; function insert(uint256 id, address addr) external returns (uint256){ uint256 temp = uint256(addr); uint256 memberIndex = getSetLength(id); for (uint i = 0; i < setIds[id].length; i++) { require(addr != address(setIds[id][i])); } temp |= memberIndex<<160; setIds[id].push(temp); return memberIndex; } function contains(uint256 setId, address addr) public view returns(uint96 memberIndex, address id) { for (uint96 i = 0; i < setIds[setId].length; i++) { if (addr == address(setIds[setId][i])) { id = address(setIds[setId][i]); memberIndex = uint96(setIds[setId][i]>>160); } } } function getSetLength(uint256 id) public view returns (uint256) { return setIds[id].length; } } //pack address w/member index of type uint96 //store as uint256 //map address => uintid //insert //check <160bit == address //append array
0.4.24