mirror of
				https://github.com/gonum/gonum.git
				synced 2025-10-31 02:26:59 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright ©2015 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 ordered
 | |
| 
 | |
| import "gonum.org/v1/gonum/graph"
 | |
| 
 | |
| // ByID implements the sort.Interface sorting a slice of graph.Node
 | |
| // by ID.
 | |
| type ByID []graph.Node
 | |
| 
 | |
| func (n ByID) Len() int           { return len(n) }
 | |
| func (n ByID) Less(i, j int) bool { return n[i].ID() < n[j].ID() }
 | |
| func (n ByID) Swap(i, j int)      { n[i], n[j] = n[j], n[i] }
 | |
| 
 | |
| // BySliceValues implements the sort.Interface sorting a slice of
 | |
| // []int64 lexically by the values of the []int64.
 | |
| type BySliceValues [][]int64
 | |
| 
 | |
| func (c BySliceValues) Len() int { return len(c) }
 | |
| func (c BySliceValues) Less(i, j int) bool {
 | |
| 	a, b := c[i], c[j]
 | |
| 	l := len(a)
 | |
| 	if len(b) < l {
 | |
| 		l = len(b)
 | |
| 	}
 | |
| 	for k, v := range a[:l] {
 | |
| 		if v < b[k] {
 | |
| 			return true
 | |
| 		}
 | |
| 		if v > b[k] {
 | |
| 			return false
 | |
| 		}
 | |
| 	}
 | |
| 	return len(a) < len(b)
 | |
| }
 | |
| func (c BySliceValues) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
 | |
| 
 | |
| // BySliceIDs implements the sort.Interface sorting a slice of
 | |
| // []graph.Node lexically by the IDs of the []graph.Node.
 | |
| type BySliceIDs [][]graph.Node
 | |
| 
 | |
| func (c BySliceIDs) Len() int { return len(c) }
 | |
| func (c BySliceIDs) Less(i, j int) bool {
 | |
| 	a, b := c[i], c[j]
 | |
| 	l := len(a)
 | |
| 	if len(b) < l {
 | |
| 		l = len(b)
 | |
| 	}
 | |
| 	for k, v := range a[:l] {
 | |
| 		if v.ID() < b[k].ID() {
 | |
| 			return true
 | |
| 		}
 | |
| 		if v.ID() > b[k].ID() {
 | |
| 			return false
 | |
| 		}
 | |
| 	}
 | |
| 	return len(a) < len(b)
 | |
| }
 | |
| func (c BySliceIDs) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
 | |
| 
 | |
| // Int64s implements the sort.Interface sorting a slice of
 | |
| // int64.
 | |
| type Int64s []int64
 | |
| 
 | |
| func (s Int64s) Len() int           { return len(s) }
 | |
| func (s Int64s) Less(i, j int) bool { return s[i] < s[j] }
 | |
| func (s Int64s) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
 | |
| 
 | |
| // Reverse reverses the order of nodes.
 | |
| func Reverse(nodes []graph.Node) {
 | |
| 	for i, j := 0, len(nodes)-1; i < j; i, j = i+1, j-1 {
 | |
| 		nodes[i], nodes[j] = nodes[j], nodes[i]
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // LinesByIDs implements the sort.Interface sorting a slice of graph.LinesByIDs
 | |
| // lexically by the From IDs, then by the To IDs, finally by the Line IDs.
 | |
| type LinesByIDs []graph.Line
 | |
| 
 | |
| func (n LinesByIDs) Len() int { return len(n) }
 | |
| func (n LinesByIDs) Less(i, j int) bool {
 | |
| 	a, b := n[i], n[j]
 | |
| 	if a.From().ID() != b.From().ID() {
 | |
| 		return a.From().ID() < b.From().ID()
 | |
| 	}
 | |
| 	if a.To().ID() != b.To().ID() {
 | |
| 		return a.To().ID() < b.To().ID()
 | |
| 	}
 | |
| 	return n[i].ID() < n[j].ID()
 | |
| }
 | |
| func (n LinesByIDs) Swap(i, j int) { n[i], n[j] = n[j], n[i] }
 | 
