iterator

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 30, 2022 License: Apache-2.0 Imports: 2 Imported by: 3

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Fold added in v0.0.9

func Fold[T, U any](iter SeIterator[T], reducer func(accumulator U, next T) U, inital U) U

Types

type Chainer added in v0.0.8

type Chainer[T any] struct {
	// contains filtered or unexported fields
}

func NewChainer added in v0.0.8

func NewChainer[T any](former SeIterator[T], latter SeIterator[T]) *Chainer[T]

func (*Chainer[T]) Next added in v0.0.8

func (c *Chainer[T]) Next() (next T, ok bool)

func (*Chainer[T]) Reverse added in v0.0.9

func (c *Chainer[T]) Reverse() (rev SeIterator[T], ok bool)

Reverse implements Reverser.

func (*Chainer[T]) SizeHint added in v0.0.9

func (c *Chainer[T]) SizeHint() int

SizeHint implements SizeHinter.

type ChanIter

type ChanIter[T any] struct {
	// contains filtered or unexported fields
}

func NewChanIter added in v0.0.11

func NewChanIter[T any](channel <-chan T) *ChanIter[T]

NewChanIter makes ChanIter associated with given channel. To signal end of iterator, close passed channel.

*ChanIter[T] only implements SeIterator[T].

func (*ChanIter[T]) Next

func (ci *ChanIter[T]) Next() (next T, ok bool)

Next earns next element from this iterator. Next blocks until internal channel receives.

type Chunker added in v0.0.12

type Chunker[T any] struct {
	// contains filtered or unexported fields
}

func NewChunker added in v0.0.12

func NewChunker[T any](sl []T, size uint) *Chunker[T]

func (*Chunker[T]) Next added in v0.0.12

func (c *Chunker[T]) Next() (next []T, ok bool)

Next returns next element of this iterator. len(next) != size if remaining element is less than size

type DeIterator

type DeIterator[T any] interface {
	Nexter[T]
	NextBacker[T]
}

Doubly ended iterator.

type EnumerateEnt added in v0.0.9

type EnumerateEnt[T any] struct {
	Count int
	Next  T
}

type Enumerator added in v0.0.9

type Enumerator[T any] struct {
	// contains filtered or unexported fields
}

func NewEnumerator added in v0.0.11

func NewEnumerator[T any](iter SeIterator[T]) *Enumerator[T]

func (*Enumerator[T]) Next added in v0.0.9

func (e *Enumerator[T]) Next() (next EnumerateEnt[T], ok bool)

func (Enumerator[T]) SizeHint added in v0.0.9

func (iter Enumerator[T]) SizeHint() int

type Excluder

type Excluder[T any] struct {
	// contains filtered or unexported fields
}

func NewExcluder

func NewExcluder[T any](iter SeIterator[T], excluder func(T) bool) Excluder[T]

func (Excluder[T]) Next

func (e Excluder[T]) Next() (next T, ok bool)

func (Excluder[T]) Reverse added in v0.0.9

func (iter Excluder[T]) Reverse() (rev SeIterator[T], ok bool)

func (Excluder[T]) ReverseRaw added in v0.0.9

func (iter Excluder[T]) ReverseRaw() (rev *Excluder[T], ok bool)

func (Excluder[T]) SizeHint added in v0.0.9

func (iter Excluder[T]) SizeHint() int

type Iterator

type Iterator[T any] struct {
	SeIterator[T]
}

func Chunks added in v0.0.12

func Chunks[T any](sl []T, size uint) Iterator[[]T]

func Enumerate added in v0.0.9

func Enumerate[T any](iter SeIterator[T]) Iterator[EnumerateEnt[T]]

func FromChannel

func FromChannel[T any](channel <-chan T) Iterator[T]

func FromFixedList added in v0.0.9

func FromFixedList[T any](list *listparam.List[T]) Iterator[T]

func FromList

func FromList[T any](list *listparam.List[T]) Iterator[T]

func FromMap added in v0.0.17

func FromMap[T comparable, U any](m map[T]U, keySortOption func(keys []T) []T) Iterator[TwoEleTuple[T, U]]

func FromRange added in v0.0.11

func FromRange(start, end int) Iterator[int]

func FromSlice

func FromSlice[T any](sl []T) Iterator[T]

func Map

func Map[T, U any](iter SeIterator[T], mapper func(T) U) Iterator[U]

func Windows added in v0.0.12

func Windows[T any](sl []T, width uint) Iterator[[]T]

func (Iterator[T]) Chain added in v0.0.8

func (iter Iterator[T]) Chain(z SeIterator[T]) Iterator[T]

func (Iterator[T]) Collect

func (iter Iterator[T]) Collect() []T

func (Iterator[T]) Exclude

func (iter Iterator[T]) Exclude(excluder func(T) bool) Iterator[T]

func (Iterator[T]) Find added in v0.0.9

func (iter Iterator[T]) Find(predicate func(T) bool) (v T, found bool)

func (Iterator[T]) ForEach

func (iter Iterator[T]) ForEach(each func(T))

func (Iterator[T]) Map added in v0.0.9

func (iter Iterator[T]) Map(mapper func(T) T) Iterator[T]

func (Iterator[T]) MustNext added in v0.0.9

func (iter Iterator[T]) MustNext() T

func (Iterator[T]) MustReverse added in v0.0.9

func (iter Iterator[T]) MustReverse() (rev Iterator[T])

func (Iterator[T]) Reduce added in v0.0.9

func (iter Iterator[T]) Reduce(reducer func(accumulator T, next T) T) T

func (Iterator[T]) Reverse

func (iter Iterator[T]) Reverse() (rev Iterator[T], ok bool)

func (Iterator[T]) Select

func (iter Iterator[T]) Select(selector func(T) bool) Iterator[T]

func (Iterator[T]) SizeHint added in v0.0.9

func (iter Iterator[T]) SizeHint() int

func (Iterator[T]) SkipN

func (iter Iterator[T]) SkipN(n int) Iterator[T]

func (Iterator[T]) SkipWhile

func (iter Iterator[T]) SkipWhile(skipIf func(T) bool) Iterator[T]

func (Iterator[T]) TakeN

func (iter Iterator[T]) TakeN(n int) Iterator[T]

func (Iterator[T]) TakeWhile

func (iter Iterator[T]) TakeWhile(takeIf func(T) bool) Iterator[T]

func (Iterator[T]) Unwrap added in v0.0.9

func (iter Iterator[T]) Unwrap() SeIterator[T]

type ListIterDe added in v0.0.9

type ListIterDe[T any] struct {
	// contains filtered or unexported fields
}

Doubly ended iterator made from List.

func NewListIterDe added in v0.0.11

func NewListIterDe[T any](list *listparam.List[T]) *ListIterDe[T]

NewListIterDe makes *ListIterDe[T] from list.List[T]. Range is fixed at the time NewListIterDe returns. Mutating passed list outside this iterator may cause undefined behavior.

func (*ListIterDe[T]) Next added in v0.0.9

func (li *ListIterDe[T]) Next() (next T, ok bool)

func (*ListIterDe[T]) NextBack added in v0.0.9

func (li *ListIterDe[T]) NextBack() (next T, ok bool)

func (*ListIterDe[T]) SizeHint added in v0.0.9

func (li *ListIterDe[T]) SizeHint() int

SizeHint hints size of remaining elements. Size would be incorrect if and only if new element is inserted into between head and tail of the iterator.

type ListIterSe added in v0.0.9

type ListIterSe[T any] struct {
	// contains filtered or unexported fields
}

ListIterSe is monotonic list iterator. It only advances to tail. ListIterSe is not fused, its Next might return ok=true after it returns ok=false. This happens when passed list grows its tail afterwards.

func NewListIterSe added in v0.0.11

func NewListIterSe[T any](list *listparam.List[T]) *ListIterSe[T]

func (*ListIterSe[T]) Next added in v0.0.9

func (li *ListIterSe[T]) Next() (next T, ok bool)

type MapIterDe added in v0.0.17

type MapIterDe[T comparable, U any] struct {
	// contains filtered or unexported fields
}

MapIterDe is doubly ended iterator, which is made from map.

func NewMapIterDe added in v0.0.17

func NewMapIterDe[T comparable, U any](m map[T]U, keySortOption func(keys []T) []T) *MapIterDe[T, U]

NewMapIterDe makes MapIterDe[T, U] from map[T]U.

m should not be mutated after the return of this function. Otherwise behavior is undefined.

keySortOption is used to sort its iteration order. if nil, order is random (This is default behavior of range expression applied to a map, as per the Go programming language specification.)

func (*MapIterDe[T, U]) Next added in v0.0.17

func (mi *MapIterDe[T, U]) Next() (next TwoEleTuple[T, U], ok bool)

func (*MapIterDe[T, U]) NextBack added in v0.0.17

func (mi *MapIterDe[T, U]) NextBack() (next TwoEleTuple[T, U], ok bool)

func (*MapIterDe[T, U]) SizeHint added in v0.0.17

func (mi *MapIterDe[T, U]) SizeHint() int

SizeHint returns size of remaining elements. This is not an actual count of non-used elements in underlying map, since it ignores keys added after return of NewMapIterDe.

Internally, MapIterDe stores keys of map as []T, in NewMapIterDe, and consumes the slice from both end.

type Mapper

type Mapper[T, U any] struct {
	// contains filtered or unexported fields
}

Mapper applies mapper function.

func NewMapper added in v0.0.11

func NewMapper[T, U any](iter SeIterator[T], mapper func(T) U) Mapper[T, U]

func (Mapper[T, U]) Next

func (m Mapper[T, U]) Next() (next U, ok bool)

func (Mapper[T, U]) Reverse added in v0.0.9

func (iter Mapper[T, U]) Reverse() (rev SeIterator[U], ok bool)

func (Mapper[T, U]) ReverseRaw added in v0.0.9

func (iter Mapper[T, U]) ReverseRaw() (rev *Mapper[T, U], ok bool)

func (Mapper[T, U]) SizeHint added in v0.0.9

func (iter Mapper[T, U]) SizeHint() int

type NSkipper

type NSkipper[T any] struct {
	// contains filtered or unexported fields
}

func NewNSkipper

func NewNSkipper[T any](iter SeIterator[T], n int) *NSkipper[T]

func (*NSkipper[T]) Next

func (s *NSkipper[T]) Next() (next T, ok bool)

func (NSkipper[T]) Reverse added in v0.0.9

func (iter NSkipper[T]) Reverse() (rev SeIterator[T], ok bool)

func (NSkipper[T]) ReverseRaw added in v0.0.9

func (iter NSkipper[T]) ReverseRaw() (rev *NSkipper[T], ok bool)

func (*NSkipper[T]) SizeHint added in v0.0.9

func (iter *NSkipper[T]) SizeHint() int

type NTaker

type NTaker[T any] struct {
	// contains filtered or unexported fields
}

func NewNTaker

func NewNTaker[T any](iter SeIterator[T], n int) *NTaker[T]

func (*NTaker[T]) Next

func (s *NTaker[T]) Next() (next T, ok bool)

func (NTaker[T]) Reverse added in v0.0.9

func (iter NTaker[T]) Reverse() (rev SeIterator[T], ok bool)

func (NTaker[T]) ReverseRaw added in v0.0.9

func (iter NTaker[T]) ReverseRaw() (rev *NTaker[T], ok bool)

func (*NTaker[T]) SizeHint added in v0.0.9

func (t *NTaker[T]) SizeHint() int

type NextBacker

type NextBacker[T any] interface {
	NextBack() (next T, ok bool)
}

type Nexter

type Nexter[T any] interface {
	Next() (next T, ok bool)
}

type Range added in v0.0.9

type Range struct {
	// contains filtered or unexported fields
}

Range is numeric range iterator which iterates over contiguous number in range of [start, end).

Each Next call advances iterator 1 ahead to its tail. If you need to skip some number, use with Exclude or Map.

func NewRange added in v0.0.9

func NewRange(start, end int) *Range

func (*Range) Next added in v0.0.9

func (r *Range) Next() (next int, ok bool)

func (*Range) NextBack added in v0.0.9

func (r *Range) NextBack() (next int, ok bool)

func (*Range) SizeHint added in v0.0.9

func (r *Range) SizeHint() int

type ReversedDeIter added in v0.0.9

type ReversedDeIter[T any] struct {
	DeIterator[T]
}

func (ReversedDeIter[T]) Next added in v0.0.9

func (rev ReversedDeIter[T]) Next() (next T, ok bool)

func (ReversedDeIter[T]) NextBack added in v0.0.9

func (rev ReversedDeIter[T]) NextBack() (next T, ok bool)

func (ReversedDeIter[T]) Reverse added in v0.0.9

func (iter ReversedDeIter[T]) Reverse() (rev SeIterator[T], ok bool)

Reverse implements Reverser[T]. This simply unwrap iterator.

func (ReversedDeIter[T]) SizeHint added in v0.0.9

func (iter ReversedDeIter[T]) SizeHint() int

type Reverser

type Reverser[T any] interface {
	Reverse() (rev SeIterator[T], ok bool)
}

type SameTyMapper added in v0.0.9

type SameTyMapper[T any] struct {
	// contains filtered or unexported fields
}

SameTyMapper applies mapper function that returns value of same type to input.

func NewSameTyMapper added in v0.0.9

func NewSameTyMapper[T any](iter SeIterator[T], mapper func(T) T) SameTyMapper[T]

func (SameTyMapper[T]) Next added in v0.0.9

func (m SameTyMapper[T]) Next() (next T, ok bool)

func (SameTyMapper[T]) Reverse added in v0.0.9

func (iter SameTyMapper[T]) Reverse() (rev SeIterator[T], ok bool)

func (SameTyMapper[T]) ReverseRaw added in v0.0.9

func (iter SameTyMapper[T]) ReverseRaw() (rev *SameTyMapper[T], ok bool)

func (SameTyMapper[T]) SizeHint added in v0.0.9

func (iter SameTyMapper[T]) SizeHint() int

type SeIterator added in v0.0.9

type SeIterator[T any] interface {
	Nexter[T]
}

Singly ended iterator.

func MustReverse added in v0.0.9

func MustReverse[T any](iter SeIterator[T]) (rev SeIterator[T])

func Reverse added in v0.0.9

func Reverse[T any](iter SeIterator[T]) (rev SeIterator[T], ok bool)

type Selector

type Selector[T any] struct {
	// contains filtered or unexported fields
}

func NewSelector

func NewSelector[T any](iter SeIterator[T], selector func(T) bool) Selector[T]

func (Selector[T]) Next

func (s Selector[T]) Next() (next T, ok bool)

func (Selector[T]) Reverse added in v0.0.9

func (iter Selector[T]) Reverse() (rev SeIterator[T], ok bool)

func (Selector[T]) ReverseRaw added in v0.0.9

func (iter Selector[T]) ReverseRaw() (rev *Selector[T], ok bool)

func (Selector[T]) SizeHint added in v0.0.9

func (iter Selector[T]) SizeHint() int

type SizeHinter added in v0.0.9

type SizeHinter interface {
	SizeHint() int
}

type SliceIterDe added in v0.0.9

type SliceIterDe[T any] struct {
	// contains filtered or unexported fields
}

SliceIterDe is doubly ended iterator, which is made of slice.

func NewSliceIterDe added in v0.0.11

func NewSliceIterDe[T any](sl []T) *SliceIterDe[T]

NewSliceIterDe makes SliceIterDe[T] from []T.

func (*SliceIterDe[T]) Next added in v0.0.9

func (si *SliceIterDe[T]) Next() (next T, ok bool)

func (*SliceIterDe[T]) NextBack added in v0.0.9

func (si *SliceIterDe[T]) NextBack() (next T, ok bool)

func (*SliceIterDe[T]) SizeHint added in v0.0.9

func (si *SliceIterDe[T]) SizeHint() int

SizeHint returns size of remaining elements.

type TwoEleTuple added in v0.0.9

type TwoEleTuple[T any, U any] struct {
	Former T
	Latter U
}

type Unwrapper added in v0.0.9

type Unwrapper[T any] interface {
	Unwrap() SeIterator[T]
}

type WhileSkipper

type WhileSkipper[T any] struct {
	// contains filtered or unexported fields
}

func NewWhileSkipper

func NewWhileSkipper[T any](iter SeIterator[T], skipIf func(T) bool) *WhileSkipper[T]

func (*WhileSkipper[T]) Next

func (s *WhileSkipper[T]) Next() (next T, ok bool)

func (WhileSkipper[T]) Reverse added in v0.0.9

func (iter WhileSkipper[T]) Reverse() (rev SeIterator[T], ok bool)

func (WhileSkipper[T]) ReverseRaw added in v0.0.9

func (iter WhileSkipper[T]) ReverseRaw() (rev *WhileSkipper[T], ok bool)

func (WhileSkipper[T]) SizeHint added in v0.0.9

func (s WhileSkipper[T]) SizeHint() int

SizeHint implements SizeHinter.

type WhileTaker

type WhileTaker[T any] struct {
	// contains filtered or unexported fields
}

func NewWhileTaker

func NewWhileTaker[T any](iter SeIterator[T], takeIf func(T) bool) *WhileTaker[T]

func (*WhileTaker[T]) Next

func (s *WhileTaker[T]) Next() (next T, ok bool)

func (WhileTaker[T]) Reverse added in v0.0.9

func (iter WhileTaker[T]) Reverse() (rev SeIterator[T], ok bool)

func (WhileTaker[T]) ReverseRaw added in v0.0.9

func (iter WhileTaker[T]) ReverseRaw() (rev *WhileTaker[T], ok bool)

func (WhileTaker[T]) SizeHint added in v0.0.9

func (t WhileTaker[T]) SizeHint() int

type Windower added in v0.0.12

type Windower[T any] struct {
	// contains filtered or unexported fields
}

func NewWindower added in v0.0.12

func NewWindower[T any](sl []T, width uint) *Windower[T]

func (*Windower[T]) Next added in v0.0.12

func (w *Windower[T]) Next() (next []T, ok bool)

type Zipper added in v0.0.7

type Zipper[T any, U any] struct {
	// contains filtered or unexported fields
}

func Zip added in v0.0.9

func Zip[T any, U any](iterFormer SeIterator[T], iterLatter SeIterator[U]) Zipper[T, U]

func (Zipper[T, U]) Next added in v0.0.7

func (z Zipper[T, U]) Next() (next TwoEleTuple[T, U], ok bool)

func (Zipper[T, U]) Reverse added in v0.0.9

func (z Zipper[T, U]) Reverse() (rev SeIterator[TwoEleTuple[T, U]], ok bool)

Reverse implements Reverser. Reverse succeeds only when both are reversible and same size.

func (Zipper[T, U]) SizeHint added in v0.0.9

func (z Zipper[T, U]) SizeHint() int

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL