Mercurial > prosody-hg
annotate teal-src/prosody/util/smqueue.tl @ 14229:ce31fdde0ad1 default tip
net.unbound: Simplify conditional
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 13 Jun 2026 11:35:18 +0200 |
| parents | 1e01b91cf94d |
| children |
| rev | line source |
|---|---|
|
12979
fbbf4f0db8f0
teal: Move into prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12058
diff
changeset
|
1 local queue = require "prosody.util.queue"; |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 local record lib |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 -- T would typically be util.stanza |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 record smqueue<T> |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 _queue : queue.queue<T> |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 _head : integer |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 _tail : integer |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
9 _next_checkpoint : integer |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
10 type checkpoint = { integer, function(any), any } |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
11 _checkpoints : { checkpoint } |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 enum ack_errors |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 "tail" |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 "head" |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 "pop" |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 end |
|
13857
fc6495c887f6
util.smqueue: Clean up syntax errors and warnings from Teal 0.24
Kim Alvefur <zash@zash.se>
parents:
12979
diff
changeset
|
18 push : function (smqueue<T>, T) |
|
fc6495c887f6
util.smqueue: Clean up syntax errors and warnings from Teal 0.24
Kim Alvefur <zash@zash.se>
parents:
12979
diff
changeset
|
19 ack : function (smqueue<T>, integer) : { T }, ack_errors |
|
12057
e880f5a13080
util.smqueue: Add missing method to Teal record spec
Kim Alvefur <zash@zash.se>
parents:
12055
diff
changeset
|
20 resumable : function (smqueue<T>) : boolean |
|
e880f5a13080
util.smqueue: Add missing method to Teal record spec
Kim Alvefur <zash@zash.se>
parents:
12055
diff
changeset
|
21 resume : function (smqueue<T>) : queue.queue.iterator, any, integer |
|
13857
fc6495c887f6
util.smqueue: Clean up syntax errors and warnings from Teal 0.24
Kim Alvefur <zash@zash.se>
parents:
12979
diff
changeset
|
22 consume : function (smqueue<T>) : function() : T |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
23 _call_checkpoints : function(smqueue<T>, integer) |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 table : function (smqueue<T>) : { T } |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 new : function <T>(integer) : smqueue<T> |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 local type smqueue = lib.smqueue; |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 |
|
13857
fc6495c887f6
util.smqueue: Clean up syntax errors and warnings from Teal 0.24
Kim Alvefur <zash@zash.se>
parents:
12979
diff
changeset
|
32 function smqueue:push(v : T) |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 self._head = self._head + 1; |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 -- Wraps instead of errors |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 assert(self._queue:push(v)); |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
38 -- Call when receiver has acknowledged some stanzas |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
39 -- `h` (sent by the receiver) is the running count of |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
40 -- successfully received stanzas |
|
13857
fc6495c887f6
util.smqueue: Clean up syntax errors and warnings from Teal 0.24
Kim Alvefur <zash@zash.se>
parents:
12979
diff
changeset
|
41 function smqueue:ack(h : integer) : { T }, smqueue.ack_errors |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 if h < self._tail then |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
43 -- h is less than a previous h |
|
13878
9ec961173b1c
teal: Remove trailing semicolons after return
Kim Alvefur <zash@zash.se>
parents:
13857
diff
changeset
|
44 return nil, "tail" |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 elseif h > self._head then |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
46 -- h is greater than the number of stanzas we sent |
|
13878
9ec961173b1c
teal: Remove trailing semicolons after return
Kim Alvefur <zash@zash.se>
parents:
13857
diff
changeset
|
47 return nil, "head" |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 -- TODO optimize? cache table fields |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 local acked = {}; |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 self._tail = h; |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 local expect = self._head - self._tail; |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 while expect < self._queue:count() do |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 local v = self._queue:pop(); |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
55 if not v then return nil, "pop" end |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 table.insert(acked, v); |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 end |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
58 |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
59 local c = self._next_checkpoint; |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
60 if c and h >= c then |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
61 self:_call_checkpoints(h); |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
62 end |
|
13878
9ec961173b1c
teal: Remove trailing semicolons after return
Kim Alvefur <zash@zash.se>
parents:
13857
diff
changeset
|
63 return acked |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 function smqueue:count_unacked() : integer |
|
13878
9ec961173b1c
teal: Remove trailing semicolons after return
Kim Alvefur <zash@zash.se>
parents:
13857
diff
changeset
|
67 return self._head - self._tail |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 function smqueue:count_acked() : integer |
|
13878
9ec961173b1c
teal: Remove trailing semicolons after return
Kim Alvefur <zash@zash.se>
parents:
13857
diff
changeset
|
71 return self._tail |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 function smqueue:resumable() : boolean |
|
13878
9ec961173b1c
teal: Remove trailing semicolons after return
Kim Alvefur <zash@zash.se>
parents:
13857
diff
changeset
|
75 return self._queue:count() >= (self._head - self._tail) |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 function smqueue:resume() : queue.queue.iterator, any, integer |
|
13878
9ec961173b1c
teal: Remove trailing semicolons after return
Kim Alvefur <zash@zash.se>
parents:
13857
diff
changeset
|
79 return self._queue:items() |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 |
|
13857
fc6495c887f6
util.smqueue: Clean up syntax errors and warnings from Teal 0.24
Kim Alvefur <zash@zash.se>
parents:
12979
diff
changeset
|
82 function smqueue:consume() : (function() : T) |
|
fc6495c887f6
util.smqueue: Clean up syntax errors and warnings from Teal 0.24
Kim Alvefur <zash@zash.se>
parents:
12979
diff
changeset
|
83 return self._queue:consume() as (function() : T) |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 |
|
12058
4860da718e87
util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
12057
diff
changeset
|
86 -- Compatibility layer, plain ol' table |
|
13857
fc6495c887f6
util.smqueue: Clean up syntax errors and warnings from Teal 0.24
Kim Alvefur <zash@zash.se>
parents:
12979
diff
changeset
|
87 function smqueue:table() : { T } |
|
fc6495c887f6
util.smqueue: Clean up syntax errors and warnings from Teal 0.24
Kim Alvefur <zash@zash.se>
parents:
12979
diff
changeset
|
88 local t : { T } = {}; |
|
12058
4860da718e87
util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
12057
diff
changeset
|
89 for i, v in self:resume() do |
|
4860da718e87
util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
12057
diff
changeset
|
90 t[i] = v; |
|
4860da718e87
util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
12057
diff
changeset
|
91 end |
|
13878
9ec961173b1c
teal: Remove trailing semicolons after return
Kim Alvefur <zash@zash.se>
parents:
13857
diff
changeset
|
92 return t |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
95 -- Add a 'checkpoint' which will call a function when all the stanzas |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
96 -- currently in the queue have been successfully delivered and acknowledged |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
97 function smqueue:add_checkpoint(cb : function (any), ud : any) |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
98 table.insert(self._checkpoints, { self._head, cb, ud }); |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
99 if not self._next_checkpoint then |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
100 self._next_checkpoint = self._head; |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
101 end |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
102 end |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
103 |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
104 function smqueue:_call_checkpoints(h : integer) |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
105 local checkpoints = self._checkpoints; |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
106 |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
107 -- Pop the checkpoint info and update the next checkpoint info |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
108 local c = table.remove(checkpoints, 1); |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
109 self._next_checkpoint = checkpoints[1] and checkpoints[1][1] or nil; |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
110 |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
111 -- Call the callback |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
112 local cb, ud = c[2], c[3]; |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
113 cb(ud); |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
114 |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
115 -- In case we passed over multiple checkpoints, call them also |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
116 if h >= self._next_checkpoint then |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
117 return self:_call_checkpoints(h) |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
118 end |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
119 end |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
120 |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
121 local function freeze(q : smqueue<any>) : { string:integer } |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
122 return { head = q._head, tail = q._tail } |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
123 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
124 |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
125 local smqueue_mt = { |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
126 -- |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
127 __name = "smqueue"; |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
128 __index = smqueue; |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
129 __len = smqueue.count_unacked; |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
130 -- Return a simple object for serialization |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
131 -- This is forbidden by Teal. Thanks Teal! |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
132 __freeze = freeze; |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
133 } |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
134 |
|
13857
fc6495c887f6
util.smqueue: Clean up syntax errors and warnings from Teal 0.24
Kim Alvefur <zash@zash.se>
parents:
12979
diff
changeset
|
135 function lib.new<T>(size : integer) : smqueue<T> |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
136 assert(size>0); |
|
14017
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
137 return setmetatable({ |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
138 _head = 0; |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
139 _tail = 0; |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
140 _queue = queue.new(size, true); |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
141 _checkpoints = {}; |
|
1e01b91cf94d
util.smqueue: Backport changes to Teal source
Kim Alvefur <zash@zash.se>
parents:
13878
diff
changeset
|
142 }, smqueue_mt) |
|
12055
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
143 end |
|
daced16154fa
util.smqueue: Abstract queue with acknowledgements and overflow
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
144 |
|
13878
9ec961173b1c
teal: Remove trailing semicolons after return
Kim Alvefur <zash@zash.se>
parents:
13857
diff
changeset
|
145 return lib |
