X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=lib%2Fgraph%2Fvertex.rb;h=cb315e783facc188541a6386a9574d01d2754ebc;hb=d70d060196f0a62cbd3f5906e93cc1b2b31bc319;hp=0bccb57296cde47787b5b6b77f54a34a87f0393b;hpb=624e339a169bd96eb01da7288a8904e0d1830e42;p=graph.njae.git diff --git a/lib/graph/vertex.rb b/lib/graph/vertex.rb index 0bccb57..cb315e7 100644 --- a/lib/graph/vertex.rb +++ b/lib/graph/vertex.rb @@ -1,6 +1,10 @@ require 'ostruct' +# A simple graph library + module Graph + # A vertex in a graph. The edge can have arbitrary attributes,treated as + # method names. class Vertex < OpenStruct def initialize super @@ -8,6 +12,8 @@ module Graph self end + # Connect this vertex to another, creating an Edge to do so, and returning + # the Edge def connect(other) e = Edge.new e << self << other @@ -16,11 +22,14 @@ module Graph e end + # Connect this vertex to another, creating an Edge to do so, and returning + # this Vertex def <<(other) connect(other) self end + # Return the set of neighbouring vertices def neighbours vertices = self.edges.map {|e| e.vertices}.flatten vertices_to_me = vertices.select {|v| v == self}