- iterator last on all structures with reversible iterators

pull/20/head
Emir Pasic 8 years ago
parent 3a938233a0
commit f8b0747409

@ -64,12 +64,20 @@ type IteratorWithKey interface {
// ReverseIteratorWithIndex is stateful iterator for ordered containers whose values can be fetched by an index.
//
// Essentially it is the same as IteratorWithIndex, but provides additional Prev() function to enable traversal in reverse.
// Essentially it is the same as IteratorWithIndex, but provides additional:
//
// Prev() function to enable traversal in reverse
//
// Last() function to move the iterator to the last element.
type ReverseIteratorWithIndex interface {
// Prev moves the iterator to the previous element and returns true if there was a previous element in the container.
// If Prev() returns true, then previous element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
Prev() bool
// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
Last() bool
IteratorWithIndex
// Next() bool
@ -79,12 +87,20 @@ type ReverseIteratorWithIndex interface {
// ReverseIteratorWithKey is a stateful iterator for ordered containers whose elements are key value pairs.
//
// Essentially it is the same as IteratorWithKey, but provides additional Prev() function to enable traversal in reverse.
// Essentially it is the same as IteratorWithKey, but provides additional:
//
// Prev() function to enable traversal in reverse
//
// Last() function to move the iterator to the last element.
type ReverseIteratorWithKey interface {
// Prev moves the iterator to the previous element and returns true if there was a previous element in the container.
// If Prev() returns true, then previous element's index and value can be retrieved by Key() and Value().
// Modifies the state of the iterator.
Prev() bool
// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Key() and Value().
// Modifies the state of the iterator.
Last() bool
IteratorWithKey
// Next() bool

@ -230,6 +230,14 @@ func (iterator *Iterator) Reset() {
iterator.index = -1
}
// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Last() bool {
iterator.index = iterator.list.size
return iterator.Prev()
}
// Each calls the given function once for each element, passing that element's index and value.
func (list *List) Each(f func(index int, value interface{})) {
iterator := list.Iterator()

@ -370,6 +370,15 @@ func (iterator *Iterator) Reset() {
iterator.element = nil
}
// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Last() bool {
iterator.index = iterator.list.size
iterator.element = iterator.list.last
return iterator.Prev()
}
// Each calls the given function once for each element, passing that element's index and value.
func (list *List) Each(f func(index int, value interface{})) {
iterator := list.Iterator()

@ -171,6 +171,13 @@ func (iterator *Iterator) Reset() {
iterator.iterator.Reset()
}
// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Key() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Last() bool {
return iterator.iterator.Last()
}
// Each calls the given function once for each element, passing that element's key and value.
func (m *Map) Each(f func(key interface{}, value interface{})) {
iterator := m.Iterator()

@ -158,6 +158,14 @@ func (iterator *Iterator) Reset() {
iterator.iterator.Reset()
}
// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Last() bool {
iterator.index = iterator.tree.Size()
return iterator.iterator.Last()
}
// Each calls the given function once for each element, passing that element's index and value.
func (set *Set) Each(f func(index int, value interface{})) {
iterator := set.Iterator()

@ -149,6 +149,14 @@ func (iterator *Iterator) Reset() {
iterator.index = -1
}
// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Last() bool {
iterator.index = iterator.stack.Size()
return iterator.Prev()
}
// String returns a string representation of container
func (stack *Stack) String() string {
str := "ArrayStack\n"

@ -165,6 +165,14 @@ func (iterator *Iterator) Reset() {
iterator.index = -1
}
// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Index() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Last() bool {
iterator.index = iterator.heap.Size()
return iterator.Prev()
}
// String returns a string representation of container
func (heap *Heap) String() string {
str := "BinaryHeap\n"

@ -363,6 +363,14 @@ func (iterator *Iterator) Reset() {
iterator.node = nil
}
// Last moves the iterator to the last element and returns true if there was a last element in the container.
// If Last() returns true, then last element's index and value can be retrieved by Key() and Value().
// Modifies the state of the iterator.
func (iterator *Iterator) Last() bool {
iterator.node = iterator.tree.Right()
return iterator.node != nil
}
// String returns a string representation of container
func (tree *Tree) String() string {
str := "RedBlackTree\n"

Loading…
Cancel
Save