1package dag 2 3import ( 4 "fmt" 5) 6 7// Edge represents an edge in the graph, with a source and target vertex. 8type Edge interface { 9 Source() Vertex 10 Target() Vertex 11 12 Hashable 13} 14 15// BasicEdge returns an Edge implementation that simply tracks the source 16// and target given as-is. 17func BasicEdge(source, target Vertex) Edge { 18 return &basicEdge{S: source, T: target} 19} 20 21// basicEdge is a basic implementation of Edge that has the source and 22// target vertex. 23type basicEdge struct { 24 S, T Vertex 25} 26 27func (e *basicEdge) Hashcode() interface{} { 28 return fmt.Sprintf("%p-%p", e.S, e.T) 29} 30 31func (e *basicEdge) Source() Vertex { 32 return e.S 33} 34 35func (e *basicEdge) Target() Vertex { 36 return e.T 37} 38