Sha256: abec70c5971f2f01ab57d0a251280aa1c40a0bd58fc495a506e1cf182cb3a9ef
Contents?: true
Size: 1.94 KB
Versions: 1
Compression:
Stored size: 1.94 KB
Contents
# A simple graph library module GraphNjae # An edge (or multiedge) in a graph. The edge can have arbitrary attributes, # treated as method names. # # Each connection is handled by a Graph::Connection object, so that each end # of the Edge can have it's own attributes. class Edge < OpenStruct def initialize(values = {}) super(values) self.connections = [] self end # Connect this edge to a vertex def <<(other) c = Connection.new c.end = other other.edges << self unless other.edges.include? self self.connections << c self end # Return the set of vertices this edge connects. def vertices self.connections.map {|c| c.end} end # Return the connection object that joins this Edge to the specified Vertex def connection_at(vertex) self.connections.find {|c| c.end.equal? vertex} end # Return the vertex at the other end of the one given. # Self-loops should still return the vertex def other_end(vertex) if self.vertices[0] == vertex self.vertices[1] else self.vertices[0] end end def to_s '<E: ' + self.type.to_s + ' [' + self.vertices.map {|n| n.to_s}.join(', ') + '] >' end def to_dot(opts = {}) if block_given? yield self else dot = self.connections[0].end.object_id.to_s + " -- " + self.connections[1].end.object_id.to_s if opts.size > 0 dot << ' {' dot << opts.keys.map { |k| (k.to_s + ' = "' + self.instance_eval(opts[k].to_s).to_s) + '"' }.join(', ') dot << '}' end dot << ';' end end end # A connection between an Edge and a Vertex.The connection can have arbitrary attributes, # treated as method names. class Connection < OpenStruct def initialize(values = {}) super(values) self end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
graph.njae-0.4.0 | lib/graph.njae/edge.rb |