//Write your own contracts here. Currently compiles using solc v0.4.15+commit.bbb8e64f. pragma solidity ^0.4.19; library IterableSet { struct Item { uint previous; bool value; } struct Set { uint tail; uint size; mapping (uint => Item) data; } function exists(Set storage self, uint key) public view returns (bool) { return self.data[key].value; } function add(Set storage self, uint key) public { self.data[key] = Item({ previous: self.tail, value: true }); self.tail = key; self.size++; } function remove(Set storage self, uint key) public { require(exists(self, key)); if(self.tail != key) { self.tail = self.data[self.tail].previous; delete self.data[key]; self.size--; } else { Item storage next = self.data[self.tail]; while( next.previous != key) { next = self.data[next.previous]; } next.previous = self.data[key].previous; delete self.data[key]; self.size--; } } } contract SimpleStore { IterableSet.Set set; using IterableSet for IterableSet.Set; function add(uint _value) public { set.add(_value); } function remove(uint _value) public { set.remove(_value); } function exists(uint _value) public constant returns (bool) { return set.exists(_value); } }
0.4.19