mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 23:26:52 +08:00

According to Comment Sentences at github.com/golang [1], it is a convention to begin a comment with the name of the exported element. [1]: https://github.com/golang/go/wiki/CodeReviewComments#comment-sentences Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
132 lines
3.2 KiB
Go
132 lines
3.2 KiB
Go
// Copyright ©2018 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 iterator
|
|
|
|
import "gonum.org/v1/gonum/graph"
|
|
|
|
// OrderedLines implements the graph.Lines and graph.LineSlicer interfaces.
|
|
// The iteration order of OrderedLines is the order of lines passed to
|
|
// NewLineIterator.
|
|
type OrderedLines struct {
|
|
idx int
|
|
lines []graph.Line
|
|
}
|
|
|
|
// NewOrderedLines returns an OrderedLines initialized with the provided lines.
|
|
func NewOrderedLines(lines []graph.Line) *OrderedLines {
|
|
return &OrderedLines{idx: -1, lines: lines}
|
|
}
|
|
|
|
// Len returns the remaining number of lines to be iterated over.
|
|
func (e *OrderedLines) Len() int {
|
|
if e.idx >= len(e.lines) {
|
|
return 0
|
|
}
|
|
if e.idx <= 0 {
|
|
return len(e.lines)
|
|
}
|
|
return len(e.lines[e.idx:])
|
|
}
|
|
|
|
// Next returns whether the next call of Line will return a valid line.
|
|
func (e *OrderedLines) Next() bool {
|
|
if uint(e.idx)+1 < uint(len(e.lines)) {
|
|
e.idx++
|
|
return true
|
|
}
|
|
e.idx = len(e.lines)
|
|
return false
|
|
}
|
|
|
|
// Line returns the current line of the iterator. Next must have been
|
|
// called prior to a call to Line.
|
|
func (e *OrderedLines) Line() graph.Line {
|
|
if e.idx >= len(e.lines) || e.idx < 0 {
|
|
return nil
|
|
}
|
|
return e.lines[e.idx]
|
|
}
|
|
|
|
// LineSlice returns all the remaining lines in the iterator and advances
|
|
// the iterator.
|
|
func (e *OrderedLines) LineSlice() []graph.Line {
|
|
if e.idx >= len(e.lines) {
|
|
return nil
|
|
}
|
|
idx := e.idx
|
|
if idx == -1 {
|
|
idx = 0
|
|
}
|
|
e.idx = len(e.lines)
|
|
return e.lines[idx:]
|
|
}
|
|
|
|
// Reset returns the iterator to its initial state.
|
|
func (e *OrderedLines) Reset() {
|
|
e.idx = -1
|
|
}
|
|
|
|
// OrderedWeightedLines implements the graph.Lines and graph.LineSlicer interfaces.
|
|
// The iteration order of OrderedWeightedLines is the order of lines passed to
|
|
// NewLineIterator.
|
|
type OrderedWeightedLines struct {
|
|
idx int
|
|
lines []graph.WeightedLine
|
|
}
|
|
|
|
// NewOrderedWeightedLines returns an OrderedWeightedLines initialized with the provided lines.
|
|
func NewOrderedWeightedLines(lines []graph.WeightedLine) *OrderedWeightedLines {
|
|
return &OrderedWeightedLines{idx: -1, lines: lines}
|
|
}
|
|
|
|
// Len returns the remaining number of lines to be iterated over.
|
|
func (e *OrderedWeightedLines) Len() int {
|
|
if e.idx >= len(e.lines) {
|
|
return 0
|
|
}
|
|
if e.idx <= 0 {
|
|
return len(e.lines)
|
|
}
|
|
return len(e.lines[e.idx:])
|
|
}
|
|
|
|
// Next returns whether the next call of WeightedLine will return a valid line.
|
|
func (e *OrderedWeightedLines) Next() bool {
|
|
if uint(e.idx)+1 < uint(len(e.lines)) {
|
|
e.idx++
|
|
return true
|
|
}
|
|
e.idx = len(e.lines)
|
|
return false
|
|
}
|
|
|
|
// WeightedLine returns the current line of the iterator. Next must have been
|
|
// called prior to a call to WeightedLine.
|
|
func (e *OrderedWeightedLines) WeightedLine() graph.WeightedLine {
|
|
if e.idx >= len(e.lines) || e.idx < 0 {
|
|
return nil
|
|
}
|
|
return e.lines[e.idx]
|
|
}
|
|
|
|
// WeightedLineSlice returns all the remaining lines in the iterator and advances
|
|
// the iterator.
|
|
func (e *OrderedWeightedLines) WeightedLineSlice() []graph.WeightedLine {
|
|
if e.idx >= len(e.lines) {
|
|
return nil
|
|
}
|
|
idx := e.idx
|
|
if idx == -1 {
|
|
idx = 0
|
|
}
|
|
e.idx = len(e.lines)
|
|
return e.lines[idx:]
|
|
}
|
|
|
|
// Reset returns the iterator to its initial state.
|
|
func (e *OrderedWeightedLines) Reset() {
|
|
e.idx = -1
|
|
}
|