本文整理汇总了Golang中github.com/Workiva/go-datastructures/slice/skip.SkipList.Iter方法的典型用法代码示例。如果您正苦于以下问题:Golang SkipList.Iter方法的具体用法?Golang SkipList.Iter怎么用?Golang SkipList.Iter使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/Workiva/go-datastructures/slice/skip.SkipList
的用法示例。
在下文中一共展示了SkipList.Iter方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: apply
func (rt *skipListRT) apply(sl *skip.SkipList, dimension uint64,
interval rangetree.Interval, fn func(rangetree.Entry) bool) bool {
lowValue, highValue := interval.LowAtDimension(dimension), interval.HighAtDimension(dimension)
var e common.Comparator
for iter := sl.Iter(skipEntry(lowValue)); iter.Next(); {
e = iter.Value()
if int64(e.(keyed).key()) >= highValue {
break
}
if isLastDimension(dimension, rt.dimensions) {
if !fn(e.(*lastBundle).entry) {
return false
}
} else {
if !rt.apply(e.(*dimensionalBundle).sl, dimension+1, interval, fn) {
return false
}
}
}
return true
}
示例2: flatten
func (rt *skipListRT) flatten(sl *skip.SkipList, dimension uint64, entries *rangetree.Entries) {
lastDimension := isLastDimension(dimension, rt.dimensions)
for iter := sl.Iter(skipEntry(0)); iter.Next(); {
if lastDimension {
*entries = append(*entries, iter.Value().(*lastBundle).entry)
} else {
rt.flatten(iter.Value().(*dimensionalBundle).sl, dimension+1, entries)
}
}
}
示例3: insert
func (rt *skipListRT) insert(sl *skip.SkipList, dimension, insertDimension uint64,
index, number int64, deleted, affected *rangetree.Entries) {
var e common.Comparator
lastDimension := isLastDimension(dimension, rt.dimensions)
affectedDimension := dimension == insertDimension
var iter skip.Iterator
if dimension == insertDimension {
iter = sl.Iter(skipEntry(index))
} else {
iter = sl.Iter(skipEntry(0))
}
var toDelete common.Comparators
if number < 0 {
toDelete = make(common.Comparators, 0, 100)
}
for iter.Next() {
e = iter.Value()
if !affectedDimension {
rt.insert(e.(*dimensionalBundle).sl, dimension+1,
insertDimension, index, number, deleted, affected,
)
continue
}
if needsDeletion(int64(e.(keyed).key()), index, number) {
toDelete = append(toDelete, e)
continue
}
if lastDimension {
e.(*lastBundle).id += uint64(number)
*affected = append(*affected, e.(*lastBundle).entry)
} else {
e.(*dimensionalBundle).id += uint64(number)
rt.flatten(e.(*dimensionalBundle).sl, dimension+1, affected)
}
}
if len(toDelete) > 0 {
for _, e := range toDelete {
if lastDimension {
*deleted = append(*deleted, e.(*lastBundle).entry)
} else {
rt.flatten(e.(*dimensionalBundle).sl, dimension+1, deleted)
}
}
sl.Delete(toDelete...)
}
}