mirror of https://github.com/k3s-io/k3s
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.7 KiB
73 lines
1.7 KiB
// Copyright ©2014 The Gonum Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package simple
|
|
|
|
import (
|
|
"math"
|
|
|
|
"gonum.org/v1/gonum/graph"
|
|
)
|
|
|
|
// Node is a simple graph node.
|
|
type Node int64
|
|
|
|
// ID returns the ID number of the node.
|
|
func (n Node) ID() int64 {
|
|
return int64(n)
|
|
}
|
|
|
|
func newSimpleNode(id int) graph.Node {
|
|
return Node(id)
|
|
}
|
|
|
|
// Edge is a simple graph edge.
|
|
type Edge struct {
|
|
F, T graph.Node
|
|
}
|
|
|
|
// From returns the from-node of the edge.
|
|
func (e Edge) From() graph.Node { return e.F }
|
|
|
|
// To returns the to-node of the edge.
|
|
func (e Edge) To() graph.Node { return e.T }
|
|
|
|
// ReversedLine returns a new Edge with the F and T fields
|
|
// swapped.
|
|
func (e Edge) ReversedEdge() graph.Edge { return Edge{F: e.T, T: e.F} }
|
|
|
|
// WeightedEdge is a simple weighted graph edge.
|
|
type WeightedEdge struct {
|
|
F, T graph.Node
|
|
W float64
|
|
}
|
|
|
|
// From returns the from-node of the edge.
|
|
func (e WeightedEdge) From() graph.Node { return e.F }
|
|
|
|
// To returns the to-node of the edge.
|
|
func (e WeightedEdge) To() graph.Node { return e.T }
|
|
|
|
// ReversedLine returns a new Edge with the F and T fields
|
|
// swapped. The weight of the new Edge is the same as
|
|
// the weight of the receiver.
|
|
func (e WeightedEdge) ReversedEdge() graph.Edge { return WeightedEdge{F: e.T, T: e.F, W: e.W} }
|
|
|
|
// Weight returns the weight of the edge.
|
|
func (e WeightedEdge) Weight() float64 { return e.W }
|
|
|
|
// isSame returns whether two float64 values are the same where NaN values
|
|
// are equalable.
|
|
func isSame(a, b float64) bool {
|
|
return a == b || (math.IsNaN(a) && math.IsNaN(b))
|
|
}
|
|
|
|
type edgeSetter interface {
|
|
SetEdge(e graph.Edge)
|
|
}
|
|
|
|
type weightedEdgeSetter interface {
|
|
SetWeightedEdge(e graph.WeightedEdge)
|
|
}
|