-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathfifo_queue.py
32 lines (25 loc) · 987 Bytes
/
fifo_queue.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import smartpy as sp
#####################################################################
# This file defines a simple FIFO queue which keeps track of a sum
# of items in the queue.
#####################################################################
class FifoDataType:
def __call__(self):
return sp.record(first=0, last=-1, sum=sp.nat(0), saved={0: sp.nat(0)})
# Pop the next element off the queue.
def pop(self, data):
sp.verify(data.first < data.last)
data.sum = sp.as_nat(data.sum - data.saved[data.first])
del data.saved[data.first]
data.first += 1
# Push an element onteh the queue.
def push(self, data, element):
data.last += 1
data.sum += element
data.saved[data.last] = element
# Peek at the head of the queue.
def head(self, data):
return data.saved[data.first]
# Return the length of the queue.
def len(self, data):
return data.last - data.first + 1