Vermilliest

Untitled

Jan 26th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. pragma solidity ^0.4.18;
  2.  
  3. contract Piramida {
  4.  
  5. bytes32 front;
  6. bytes32 back;
  7. bool isEmpty;
  8.  
  9. struct Element {
  10. address sender;
  11. uint240 count;
  12. bytes32 prev;
  13. }
  14.  
  15. mapping (bytes32 => Element) queue;
  16. mapping (bytes32 => bool) used;
  17.  
  18. function add(address sender, uint240 count) public {
  19. bytes32 key;
  20. uint increment = 0;
  21. do {
  22. key = sha256(sender, block.number, increment++);
  23. } while (used[key]);
  24. used[key] = true;
  25. queue[key] = Element(sender, count, back);
  26. if (isEmpty) {
  27. front = back = key;
  28. isEmpty = false;
  29. } else {
  30. queue[back].prev = key;
  31. back = key;
  32. }
  33. }
  34.  
  35. function pop() public {
  36. bytes32 toDelete = front;
  37. front = queue[front].prev;
  38. if (back == toDelete) {
  39. isEmpty = true;
  40. }
  41. delete used[toDelete];
  42. delete queue[toDelete];
  43. }
  44.  
  45. function getFront() public view returns(address, uint240) {
  46. require(!isEmpty);
  47. return (
  48. queue[front].sender,
  49. queue[front].count
  50. );
  51. }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment