82 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| ---@generic T
 | |
| ---@param tbl T
 | |
| ---@return T
 | |
| ---Creates a deep copy of a table, including all nested tables and their contents
 | |
| table.deepclone = function(tbl)
 | |
|     tbl = table.clone(tbl)
 | |
|     for k, v in pairs(tbl) do
 | |
|         if type(v) == "table" then
 | |
|             tbl[k] = table.deepclone(v)
 | |
|         end
 | |
|     end
 | |
|     return tbl
 | |
| end
 | |
| 
 | |
| ---@param tbl1 any
 | |
| ---@param tbl2 any
 | |
| ---@return boolean
 | |
| ---Compares if two values are equal, iterating over tables and matching both keys and values.
 | |
| table.matches = function(tbl1, tbl2)
 | |
|     local type1, type2 = type(tbl1), type(tbl2)
 | |
| 
 | |
|     if type1 ~= type2 then return false end
 | |
|     if type1 ~= 'table' and type2 ~= 'table' then return tbl1 == tbl2 end
 | |
| 
 | |
|     for k1, v1 in pairs(tbl1) do
 | |
|         local v2 = tbl2[k1]
 | |
|         if v2 == nil or not table.matches(v1, v2) then return false end
 | |
|     end
 | |
| 
 | |
|     for k2, v2 in pairs(tbl2) do
 | |
|         local v1 = tbl1[k2]
 | |
|         if v1 == nil or not table.matches(v1, v2) then return false end
 | |
|     end
 | |
| 
 | |
|     return true
 | |
| end
 | |
| 
 | |
| ---@param tbl1 any
 | |
| ---@param tbl2 any
 | |
| ---@return boolean
 | |
| ---Checks if tbl1 contains the given values.
 | |
| table.contains = function(tbl1, tbl2)
 | |
| 	if type(tbl2) ~= 'table' then
 | |
| 		for _, v in pairs(tbl1) do
 | |
| 			if v == tbl2 then return true end
 | |
| 		end
 | |
| 	else
 | |
| 		local matched = 0
 | |
| 		local values = 0
 | |
| 		for _, v1 in pairs(tbl2) do
 | |
| 			values += 1
 | |
| 
 | |
| 			for _, v2 in pairs(tbl1) do
 | |
| 				if v1 == v2 then matched += 1 end
 | |
| 			end
 | |
| 		end
 | |
| 		if matched == values then return true end
 | |
| 	end
 | |
| 
 | |
| 	return false
 | |
| end
 | |
| 
 | |
| ---@param tbl1 any
 | |
| ---@param tbl2 any
 | |
| ---@return table
 | |
| ---Merges two tables together
 | |
| table.merge = function(tbl1, tbl2)
 | |
|     for k, v in pairs(tbl2) do
 | |
|         local type1 = type(tbl1[k])
 | |
|         local type2 = type(v)
 | |
| 
 | |
|         if type1 == 'table' and type2 == 'table' then
 | |
|             table.merge(tbl1[k], v)
 | |
|         elseif type1 == 'number' and type2 == 'number' then
 | |
|             tbl1[k] += v
 | |
|         else
 | |
|             tbl1[k] = v
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     return tbl1
 | |
| end
 | 
