Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pragma solidity ^0.4.18;
- contract QueueExample {
- bytes32 front;
- bytes32 back;
- bool isEmpty;
- struct ElementData {
- // Some Data
- int num;
- }
- struct Element {
- ElementData data;
- bytes32 prev;
- }
- mapping (bytes32 => Element) queue;
- mapping (bytes32 => bool) used;
- function QueueExample() public {
- isEmpty = true;
- }
- function enqueue(int someData) public {
- bytes32 key;
- uint increment = 0;
- do {
- // u can use tx's hash instead of block.number
- key = sha256(someData, msg.sender, block.number, increment++);
- } while (used[key]);
- used[key] = true;
- queue[key] = Element(ElementData(someData), back);
- if (isEmpty) {
- front = back = key;
- isEmpty = false;
- } else {
- queue[back].prev = key;
- back = key;
- }
- }
- function dequeue() public returns(int returnableData) {
- returnableData = getFront();
- bytes32 toDelete = front;
- front = queue[front].prev;
- if (back == toDelete) {
- isEmpty = true;
- }
- delete used[toDelete];
- delete queue[toDelete];
- }
- function getFront() public view returns(int returnableData) {
- require(!isEmpty);
- ElementData storage data = queue[front].data;
- returnableData = data.num;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment