annotate src/luan/modules/Table.luan @ 1607:fa066aaa068c

nginx caching
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 30 Apr 2021 20:23:28 -0600
parents 465b4a0dae4a
children 19df8abc9805
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1353
8d95711f6615 replace java() with require "java"
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
1 require "java"
321
7f7708e8fdd4 remove import statement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 320
diff changeset
2 local TableLuan = require "java:luan.modules.TableLuan"
297
899253043270 remove PackageLuan.load_lib()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
3
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
4 local Table = {}
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 497
diff changeset
5
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
6 Table.clear = TableLuan.clear
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
7 Table.concat = TableLuan.concat
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
8 Table.copy = TableLuan.copy
1095
2443152dc2f1 add Luan.hash_code() and Table.hash_value()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1088
diff changeset
9 Table.hash_value = TableLuan.hash_value
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
10 Table.insert = TableLuan.insert
1100
ad6b3b9fef40 add Table.is_empty() and Table.size()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1095
diff changeset
11 Table.is_empty = TableLuan.is_empty
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
12 Table.pack = TableLuan.pack
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
13 Table.remove = TableLuan.remove
1100
ad6b3b9fef40 add Table.is_empty() and Table.size()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1095
diff changeset
14 Table.size = TableLuan.size
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
15 Table.sort = TableLuan.sort
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
16 Table.unpack = TableLuan.unpack
497
55f9f74f1e55 Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 407
diff changeset
17
1261
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
18
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
19 local Luan = require "luan:Luan.luan"
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
20 local error = Luan.error
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
21 local type = Luan.type or error()
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
22 local pairs = Luan.pairs or error()
1607
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
23 local set_metatable = Luan.set_metatable or error()
1267
9fa8b8389578 add LuanTable.luan;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1262
diff changeset
24 local toTable = TableLuan.toTable or error()
1464
465b4a0dae4a empty list vs map
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
25 local copy = Table.copy or error()
1261
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
26
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
27 function Table.java_to_table_shallow(obj)
1262
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
28 local rtn = toTable(obj)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
29 if rtn ~= nil then
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
30 return rtn
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
31 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
32 local tp = type(obj)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
33 if tp == "java" then
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
34 tp = obj.getClass().getName()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
35 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
36 error("can't convert type "..tp.." to table")
1261
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
37 end
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
38
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
39 local to_luan, deepen
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
40
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
41 function to_luan(obj,java_to_table_shallow)
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
42 return type(obj)=="java" and deepen(java_to_table_shallow(obj),java_to_table_shallow) or obj
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
43 end
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
44
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
45 function deepen(tbl,java_to_table_shallow)
1464
465b4a0dae4a empty list vs map
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
46 for key, value in pairs(copy(tbl)) do
1261
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
47 key = to_luan(key,java_to_table_shallow)
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
48 value = to_luan(value,java_to_table_shallow)
1464
465b4a0dae4a empty list vs map
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
49 tbl[key] = value
1261
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
50 end
1464
465b4a0dae4a empty list vs map
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
51 return tbl
1261
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
52 end
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
53
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
54 function Table.java_to_table_deep(obj,java_to_table_shallow)
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
55 java_to_table_shallow = java_to_table_shallow or Table.java_to_table_shallow
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
56 return deepen(java_to_table_shallow(obj),java_to_table_shallow)
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
57 end
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
58
198d6af7330a rename Luan.to_table to Table.java_to_table_shallow and Luan.to_luan to Table.java_to_table_deep
Franklin Schmidt <fschmidt@gmail.com>
parents: 1260
diff changeset
59
1607
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
60 function Table.case_insensitive(src)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
61 local String = require "luan:String.luan"
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
62 local lower = String.lower or error()
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
63
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
64 local map = {}
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
65 local mt = {}
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
66 function mt.__new_index(tbl,key,value)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
67 if value==nil then
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
68 map[lower(key)] = nil
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
69 else
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
70 map[lower(key)] = { s=key, v=value }
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
71 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
72 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
73 function mt.__index(tbl,key)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
74 local val = map[lower(key)]
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
75 return val and val.v
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
76 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
77 function mt.__pairs(tbl)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
78 local fn = pairs(map)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
79 return function()
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
80 local _, val = fn()
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
81 if val == nil then
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
82 return nil
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
83 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
84 return val.s, val.v
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
85 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
86 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
87
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
88 local t = {}
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
89 set_metatable(t,mt)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
90 for k,v in pairs(src or {}) do
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
91 t[k] = v
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
92 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
93 return t
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
94 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
95
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
96
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
97 return Table