File: table.lua

package info (click to toggle)
eja 9.5.20-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster, stretch
  • size: 1,340 kB
  • ctags: 3,142
  • sloc: ansic: 15,010; makefile: 255
file content (88 lines) | stat: -rw-r--r-- 1,363 bytes parent folder | download
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
-- Copyright (C) 2007-2014 by Ubaldo Porcheddu <ubaldo@eja.it>


function ejaTableGet(array, index)
 local b=getmetatable(array)
 if index and index>0 then index=index-1 else index=0 end
 if index < 1 then index=nil end
 local _,key=next(b,index)
 return key,array[key]
end


function ejaTablePut(array, key, value, index)
 if not array then array={} end
 local b=getmetatable(array) or {}
 if key then
  if not array[key] then 
   if tonumber(index) then
    b[tonumber(index)]=key
   else 
    b[#b+1]=key 
   end
  end
  array[key]=value
 end
 setmetatable(array,b)
 return array
end


function ejaTableLen(array)
 local i=0
 for k,v in next,array do i=i+1 end
 return i
end


function ejaTableMerge(old, new)
 if old and new and #new > 1 then
  for i=1,ejaTableLen(old) do
   k,v=ejaTableGet(old,i)
   ejaTablePut(old,k,new[i])
  end
  return true
 else
  return false
 end
end


function ejaTableSort(t)
 a={}
 for k,v in next,t do
  table.insert(a,k)
 end
 table.sort(a)
 setmetatable(t,a)
 return t
end


function ejaTableValues(t)
 local a={}
 for k,v in next,getmetatable(t) do
  a[#a+1]=t[v]
 end
 return a
end


function ejaTableKeys(t)
 local a={}
 for k,v in next,getmetatable(t) do
  a[#a+1]=v
 end
 return a
end

function ejaTableUnpack(a)
 return table.unpack(a)
end


function ejaTablePack(...)
 local a=table.pack(...)
 a['n']=nil
 return a
end