Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pragma solidity ^0.4.18;
- contract Piramida {
- bytes32 front;
- bytes32 back;
- bool isEmpty;
- struct Element {
- address sender;
- uint240 count;
- bytes32 prev;
- }
- mapping (bytes32 => Element) queue;
- mapping (bytes32 => bool) used;
- function add(address sender, uint240 count) public {
- bytes32 key;
- uint increment = 0;
- do {
- key = sha256(sender, block.number, increment++);
- } while (used[key]);
- used[key] = true;
- queue[key] = Element(sender, count, back);
- if (isEmpty) {
- front = back = key;
- isEmpty = false;
- } else {
- queue[back].prev = key;
- back = key;
- }
- }
- function pop() public {
- bytes32 toDelete = front;
- front = queue[front].prev;
- if (back == toDelete) {
- isEmpty = true;
- }
- delete used[toDelete];
- delete queue[toDelete];
- }
- function getFront() public view returns(address, uint240) {
- require(!isEmpty);
- return (
- queue[front].sender,
- queue[front].count
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment