aboutsummaryrefslogtreecommitdiffstats
path: root/lib/iterator/iterator.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/iterator/iterator.go')
-rw-r--r--lib/iterator/iterator.go35
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{}
+}