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