annotate src/luan/modules/Table.luan @ 1802:ca98dee04e08 default tip

add Parsers.json_null
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 21 Apr 2024 21:25:15 -0600
parents 19df8abc9805
children
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
1704
19df8abc9805 add Table.is_list
Franklin Schmidt <fschmidt@gmail.com>
parents: 1607
diff changeset
12 Table.is_list = TableLuan.is_list
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
13 Table.pack = TableLuan.pack
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
14 Table.remove = TableLuan.remove
1100
ad6b3b9fef40 add Table.is_empty() and Table.size()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1095
diff changeset
15 Table.size = TableLuan.size
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
16 Table.sort = TableLuan.sort
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
17 Table.unpack = TableLuan.unpack
497
55f9f74f1e55 Http.request is now pure luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 407
diff changeset
18
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
19
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 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
21 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
22 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
23 local pairs = Luan.pairs or error()
1607
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
24 local set_metatable = Luan.set_metatable or error()
1267
9fa8b8389578 add LuanTable.luan;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1262
diff changeset
25 local toTable = TableLuan.toTable or error()
1464
465b4a0dae4a empty list vs map
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
26 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
27
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
28 function Table.java_to_table_shallow(obj)
1262
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
29 local rtn = toTable(obj)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
30 if rtn ~= nil then
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
31 return rtn
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
32 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
33 local tp = type(obj)
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
34 if tp == "java" then
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
35 tp = obj.getClass().getName()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
36 end
Franklin Schmidt <fschmidt@gmail.com>
parents: 1261
diff changeset
37 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
38 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
39
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 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
41
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 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
43 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
44 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
45
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
46 function deepen(tbl,java_to_table_shallow)
1464
465b4a0dae4a empty list vs map
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
47 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
48 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
49 value = to_luan(value,java_to_table_shallow)
1464
465b4a0dae4a empty list vs map
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
50 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
51 end
1464
465b4a0dae4a empty list vs map
Franklin Schmidt <fschmidt@gmail.com>
parents: 1353
diff changeset
52 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
53 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
54
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 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
56 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
57 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
58 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
59
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
60
1607
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
61 function Table.case_insensitive(src)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
62 local String = require "luan:String.luan"
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
63 local lower = String.lower or error()
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
64
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
65 local map = {}
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
66 local mt = {}
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
67 function mt.__new_index(tbl,key,value)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
68 if value==nil then
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
69 map[lower(key)] = nil
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
70 else
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
71 map[lower(key)] = { s=key, v=value }
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 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
74 function mt.__index(tbl,key)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
75 local val = map[lower(key)]
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
76 return val and val.v
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
77 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
78 function mt.__pairs(tbl)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
79 local fn = pairs(map)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
80 return function()
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
81 local _, val = fn()
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
82 if val == nil then
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
83 return nil
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
84 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
85 return val.s, val.v
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 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
88
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
89 local t = {}
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
90 set_metatable(t,mt)
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
91 for k,v in pairs(src or {}) do
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
92 t[k] = v
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
93 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
94 return t
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
95 end
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
96
fa066aaa068c nginx caching
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
97
1088
bae2d0c2576c change module naming convention
Franklin Schmidt <fschmidt@gmail.com>
parents: 796
diff changeset
98 return Table