本文整理汇总了Golang中github.com/Workiva/go-datastructures/slice/skip.SkipList.Delete方法的典型用法代码示例。如果您正苦于以下问题:Golang SkipList.Delete方法的具体用法?Golang SkipList.Delete怎么用?Golang SkipList.Delete使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/Workiva/go-datastructures/slice/skip.SkipList
的用法示例。
在下文中一共展示了SkipList.Delete方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: deleteRecursive
// deleteRecursive is used by the delete logic. The recursion depth
// only goes as far as the number of dimensions, so this shouldn't be an
// issue.
func (rt *skipListRT) deleteRecursive(sl *skip.SkipList, dimension uint64,
entry rangetree.Entry) rangetree.Entry {
value := entry.ValueAtDimension(dimension)
if isLastDimension(dimension, rt.dimensions) {
entries := sl.Delete(skipEntry(value))
if entries[0] == nil {
return nil
}
rt.number--
return entries[0].(*lastBundle).entry
}
db, ok := sl.Get(skipEntry(value))[0].(*dimensionalBundle)
if !ok { // value was not found
return nil
}
result := rt.deleteRecursive(db.sl, dimension+1, entry)
if result == nil {
return nil
}
if db.sl.Len() == 0 {
sl.Delete(db)
}
return result
}
示例2: 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...)
}
}