Codebase list golang-github-marstr-collection / a2d5febc-293d-4e77-a8d0-6996a337a49b/main fibonacci.go
a2d5febc-293d-4e77-a8d0-6996a337a49b/main

Tree @a2d5febc-293d-4e77-a8d0-6996a337a49b/main (Download .tar.gz)

fibonacci.go @a2d5febc-293d-4e77-a8d0-6996a337a49b/mainraw · history · blame

package collection

type fibonacciGenerator struct{}

// Fibonacci is an Enumerable which will dynamically generate the fibonacci sequence.
var Fibonacci Enumerable = fibonacciGenerator{}

func (gen fibonacciGenerator) Enumerate(cancel <-chan struct{}) Enumerator {
	retval := make(chan interface{})

	go func() {
		defer close(retval)
		a, b := 0, 1

		for {
			select {
			case retval <- a:
				a, b = b, a+b
			case <-cancel:
				return
			}
		}
	}()

	return retval
}