36 lines
1.3 KiB
Go
36 lines
1.3 KiB
Go
|
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{}
|
||
|
}
|