110 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
| -- @docclass table
 | |
| 
 | |
| function table.dump(t, depth)
 | |
|   if not depth then depth = 0 end
 | |
|   for k,v in pairs(t) do
 | |
|     str = (' '):rep(depth * 2) .. k .. ': '
 | |
|     if type(v) ~= "table" then
 | |
|       print(str .. tostring(v))
 | |
|     else
 | |
|       print(str)
 | |
|       table.dump(v, depth+1)
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| function table.copy(t)
 | |
|   local res = {}
 | |
|   for k,v in pairs(t) do
 | |
|     res[k] = v
 | |
|   end
 | |
|   return res
 | |
| end
 | |
| 
 | |
| function table.recursivecopy(t)
 | |
|   local res = {}
 | |
|   for k,v in pairs(t) do
 | |
|     if type(v) == "table" then
 | |
|       res[k] = table.recursivecopy(v)
 | |
|     else
 | |
|       res[k] = v
 | |
|     end
 | |
|   end
 | |
|   return res
 | |
| end
 | |
| 
 | |
| function table.selectivecopy(t, keys)
 | |
|   local res = { }
 | |
|   for i,v in ipairs(keys) do
 | |
|     res[v] = t[v]
 | |
|   end
 | |
|   return res
 | |
| end
 | |
| 
 | |
| function table.merge(t, src)
 | |
|   for k,v in pairs(src) do
 | |
|     t[k] = v
 | |
|   end
 | |
| end
 | |
| 
 | |
| function table.find(t, value)
 | |
|   for k,v in pairs(t) do
 | |
|     if v == value then return k end
 | |
|   end
 | |
| end
 | |
| 
 | |
| function table.contains(t, value)
 | |
|   return table.find(t, value) ~= nil
 | |
| end
 | |
| 
 | |
| function table.findKey(t, key)
 | |
|   if t and type(t) == 'table' then
 | |
|     for k,v in pairs(t) do
 | |
|       if k == key then return k end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| function table.hasKey(t, key)
 | |
|   return table.findKey(t, key) ~= nil
 | |
| end
 | |
| 
 | |
| function table.removevalue(t, value)
 | |
|   for k,v in pairs(t) do
 | |
|     if v == value then
 | |
|       table.remove(t, k)
 | |
|       break
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| function table.compare(t, other)
 | |
|   if #t ~= #other then return false end
 | |
|   for k,v in pairs(t) do
 | |
|     if v ~= other[k] then return false end
 | |
|   end
 | |
|   return true
 | |
| end
 | |
| 
 | |
| function table.empty(t)
 | |
|   if t and type(t) == 'table' then
 | |
|     return next(t) == nil
 | |
|   end
 | |
|   return true
 | |
| end
 | |
| 
 | |
| function table.toString(t)
 | |
|   local maxn = #t
 | |
|   local str = ""
 | |
|   for k,v in pairs(t) do
 | |
|     if k == maxn and k ~= 1 then
 | |
|       str = str .. " and " .. v
 | |
|     elseif maxn > 1 and k ~= 1 then
 | |
|       str = str .. ", " .. v
 | |
|     else
 | |
|       str = str .. " " .. v
 | |
|     end
 | |
|   end
 | |
|   return str
 | |
| end
 |