diff options
Diffstat (limited to 'lib/iterator/iterator.go')
-rw-r--r-- | lib/iterator/iterator.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/iterator/iterator.go b/lib/iterator/iterator.go new file mode 100644 index 00000000..28a9b8b3 --- /dev/null +++ b/lib/iterator/iterator.go @@ -0,0 +1,35 @@ +package iterator + +// Factory is the interface that wraps the NewIterator method. The +// NewIterator() creates either UID or thread iterators and ensures that both +// types of iterators implement the same iteration direction. +type Factory interface { + NewIterator(a interface{}) Iterator +} + +// Iterator implements an interface for iterating over UID or thread data. If +// Next() returns true, the current value of the iterator can be read with +// Value(). The return value of Value() is an interface{} type which needs to +// be cast to the correct type. +// +// The iterators are implemented such that the first returned value always +// represents the top message in the message list. Hence, StartIndex() would +// return the index of the top message whereas EndIndex() returns the index of +// message at the bottom of the list. +type Iterator interface { + Next() bool + Value() interface{} + StartIndex() int + EndIndex() int +} + +// NewFactory creates an iterator factory. When reverse is true, the iterators +// are reversed in the sense that the lowest UID messages are displayed at the +// top of the message list. Otherwise, the default order is with the highest +// UID message on top. +func NewFactory(reverse bool) Factory { + if reverse { + return &reverseFactory{} + } + return &defaultFactory{} +} |