Table3d.lua 771 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. local Table3d = {}
  2. function Table3d.new(defaultValue)
  3. local self = setmetatable({},{__index = Table3d})
  4. self.defaultValue = defaultValue
  5. self._table = {}
  6. return self
  7. end
  8. function Table3d:get(x, y, z)
  9. local t = self._table
  10. local default = self.defaultValue
  11. if not t[x] then return default end
  12. if not t[x][y] then return default end
  13. return t[x][y][z] or default
  14. end
  15. function Table3d:set(x, y, z, value)
  16. local t = self._table
  17. t[x] = t[x] or {}
  18. t[x][y] = t[x][y] or {}
  19. t[x][y][z] = value
  20. self:prune(x,y)
  21. end
  22. function Table3d:prune(x,y)
  23. local t = self._table
  24. if next(t[x][y]) == nil then
  25. t[x][y] = nil
  26. end
  27. if next(t[x]) == nil then
  28. t[x] = nil
  29. end
  30. end
  31. return Table3d