route/vendor/github.com/zclconf/go-cty/cty/set/iterator.go

37 lines
609 B
Go
Raw Normal View History

2017-12-02 23:34:35 +00:00
package set
type Iterator struct {
bucketIds []int
vals map[int][]interface{}
bucketIdx int
valIdx int
}
func (it *Iterator) Value() interface{} {
return it.currentBucket()[it.valIdx]
}
func (it *Iterator) Next() bool {
if it.bucketIdx == -1 {
// init
if len(it.bucketIds) == 0 {
return false
}
it.valIdx = 0
it.bucketIdx = 0
return true
}
it.valIdx++
if it.valIdx >= len(it.currentBucket()) {
it.valIdx = 0
it.bucketIdx++
}
return it.bucketIdx < len(it.bucketIds)
}
func (it *Iterator) currentBucket() []interface{} {
return it.vals[it.bucketIds[it.bucketIdx]]
}