]>
Commit | Line | Data |
---|---|---|
1 | package dag | |
2 | ||
3 | import ( | |
4 | "fmt" | |
5 | ) | |
6 | ||
7 | // Edge represents an edge in the graph, with a source and target vertex. | |
8 | type 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. | |
17 | func 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. | |
23 | type basicEdge struct { | |
24 | S, T Vertex | |
25 | } | |
26 | ||
27 | func (e *basicEdge) Hashcode() interface{} { | |
28 | return fmt.Sprintf("%p-%p", e.S, e.T) | |
29 | } | |
30 | ||
31 | func (e *basicEdge) Source() Vertex { | |
32 | return e.S | |
33 | } | |
34 | ||
35 | func (e *basicEdge) Target() Vertex { | |
36 | return e.T | |
37 | } |