Thu, 23 Mar 2023 15:30:57 +0000
Dockerfile: Update to bullseye-slim and install lua-unbound
40
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 | -- Prosody IM |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 | -- Copyright (C) 2008-2015 Matthew Wild |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 | -- Copyright (C) 2008-2015 Waqas Hussain |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 | -- |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 | -- This project is MIT/X11 licensed. Please see the |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 | -- COPYING file in the source package for more information. |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 | -- |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 | |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 | -- Small ringbuffer library (i.e. an efficient FIFO queue with a size limit) |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 | -- (because unbounded dynamically-growing queues are a bad thing...) |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 | |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 | local have_utable, utable = pcall(require, "util.table"); -- For pre-allocation of table |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 | |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 | local function new(size, allow_wrapping) |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 | -- Head is next insert, tail is next read |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 | local head, tail = 1, 1; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 | local items = 0; -- Number of stored items |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 | local t = have_utable and utable.create(size, 0) or {}; -- Table to hold items |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 | |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 | return { |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 | _items = t; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 | size = size; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 | count = function (self) return items; end; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 | push = function (self, item) |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 | if items >= size then |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 | if allow_wrapping then |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 | tail = (tail%size)+1; -- Advance to next oldest item |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 | items = items - 1; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 | else |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 | return nil, "queue full"; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 | end |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 | end |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 | t[head] = item; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 | items = items + 1; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 | head = (head%size)+1; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 | return true; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 | end; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 | pop = function (self) |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 | if items == 0 then |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 | return nil; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 | end |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
42 | local item; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
43 | item, t[tail] = t[tail], 0; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
44 | tail = (tail%size)+1; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
45 | items = items - 1; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
46 | return item; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 | end; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
48 | peek = function (self) |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 | if items == 0 then |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 | return nil; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 | end |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 | return t[tail]; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 | end; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 | items = function (self) |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 | return function (t, pos) |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
56 | if pos >= t:count() then |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
57 | return nil; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
58 | end |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 | local read_pos = tail + pos; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 | if read_pos > t.size then |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 | read_pos = (read_pos%size); |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 | end |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 | return pos+1, t._items[read_pos]; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 | end, self, 0; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 | end; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 | }; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 | end |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 | |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 | return { |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 | new = new; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 | }; |
ecad8c75ba87
scansion.queue: Import util.queue from Prosody
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 |