Node.lua 815 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. -- ================
  2. -- Private helpers
  3. -- ================
  4. local setmetatable = setmetatable
  5. -- Internal class constructor
  6. local class = function(...)
  7. local klass = {}
  8. klass.__index = klass
  9. klass.__call = function(_,...) return klass:new(...) end
  10. function klass:new(...)
  11. local instance = setmetatable({}, klass)
  12. klass.__init(instance, ...)
  13. return instance
  14. end
  15. return setmetatable(klass,{__call = klass.__call})
  16. end
  17. local Node = class()
  18. Node.__tostring = function(n)
  19. local res = 'Node %d (%d neighbours)'
  20. res = res:format(n.id, #n.neighbours)
  21. for _,nn in pairs(n.neighbours) do
  22. res = res..('\n=> %d'):format(nn.id)
  23. end
  24. return res
  25. end
  26. function Node:__init( id )
  27. self.id = id
  28. self.neighbours = {}
  29. end
  30. function Node:link( node )
  31. table.insert(self.neighbours, node)
  32. end
  33. return Node