-- ================ -- Private helpers -- ================ local setmetatable = setmetatable -- Internal class constructor local class = function(...) local klass = {} klass.__index = klass klass.__call = function(_,...) return klass:new(...) end function klass:new(...) local instance = setmetatable({}, klass) klass.__init(instance, ...) return instance end return setmetatable(klass,{__call = klass.__call}) end local Node = class() Node.__tostring = function(n) local res = 'Node %d (%d neighbours)' res = res:format(n.id, #n.neighbours) for _,nn in pairs(n.neighbours) do res = res..('\n=> %d'):format(nn.id) end return res end function Node:__init( id ) self.id = id self.neighbours = {} end function Node:link( node ) table.insert(self.neighbours, node) end return Node