github.com/hartzell/terraform@v0.8.6-0.20180503104400-0cc9e050ecd4/dag/edge.go (about)

     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  }