github.com/gopherd/gonum@v0.0.4/graph/simple/simple.go (about)

     1  // Copyright ©2014 The Gonum Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package simple
     6  
     7  import (
     8  	"math"
     9  
    10  	"github.com/gopherd/gonum/graph"
    11  )
    12  
    13  // Node is a simple graph node.
    14  type Node int64
    15  
    16  // ID returns the ID number of the node.
    17  func (n Node) ID() int64 {
    18  	return int64(n)
    19  }
    20  
    21  func newSimpleNode(id int) graph.Node {
    22  	return Node(id)
    23  }
    24  
    25  // Edge is a simple graph edge.
    26  type Edge struct {
    27  	F, T graph.Node
    28  }
    29  
    30  // From returns the from-node of the edge.
    31  func (e Edge) From() graph.Node { return e.F }
    32  
    33  // To returns the to-node of the edge.
    34  func (e Edge) To() graph.Node { return e.T }
    35  
    36  // ReversedLine returns a new Edge with the F and T fields
    37  // swapped.
    38  func (e Edge) ReversedEdge() graph.Edge { return Edge{F: e.T, T: e.F} }
    39  
    40  // WeightedEdge is a simple weighted graph edge.
    41  type WeightedEdge struct {
    42  	F, T graph.Node
    43  	W    float64
    44  }
    45  
    46  // From returns the from-node of the edge.
    47  func (e WeightedEdge) From() graph.Node { return e.F }
    48  
    49  // To returns the to-node of the edge.
    50  func (e WeightedEdge) To() graph.Node { return e.T }
    51  
    52  // ReversedLine returns a new Edge with the F and T fields
    53  // swapped. The weight of the new Edge is the same as
    54  // the weight of the receiver.
    55  func (e WeightedEdge) ReversedEdge() graph.Edge { return WeightedEdge{F: e.T, T: e.F, W: e.W} }
    56  
    57  // Weight returns the weight of the edge.
    58  func (e WeightedEdge) Weight() float64 { return e.W }
    59  
    60  // isSame returns whether two float64 values are the same where NaN values
    61  // are equalable.
    62  func isSame(a, b float64) bool {
    63  	return a == b || (math.IsNaN(a) && math.IsNaN(b))
    64  }
    65  
    66  type edgeSetter interface {
    67  	SetEdge(e graph.Edge)
    68  }
    69  
    70  type weightedEdgeSetter interface {
    71  	SetWeightedEdge(e graph.WeightedEdge)
    72  }