func (rt *skipListRT) add(entry rangetree.Entry) rangetree.Entry { var ( value int64 e common.Comparator sl = rt.top db *dimensionalBundle lb *lastBundle ) for i := uint64(0); i < rt.dimensions; i++ { value = entry.ValueAtDimension(i) e = sl.Get(skipEntry(value))[0] if isLastDimension(i, rt.dimensions) { if e != nil { // this is an overwrite lb = e.(*lastBundle) oldEntry := lb.entry lb.entry = entry return oldEntry } // need to add new sl entry lb = &lastBundle{id: uint64(value), entry: entry} rt.number++ sl.Insert(lb) return nil } if e == nil { // we need the intermediate dimension db = &dimensionalBundle{id: uint64(value), sl: skip.New(uint64(0))} sl.Insert(db) } else { db = e.(*dimensionalBundle) } sl = db.sl } panic(`Ran out of dimensions before for loop completed.`) }
func newNodes() *nodes { return &nodes{ list: skip.New(uint64(0)), } }
func (rt *skipListRT) init(dimensions uint64) { rt.dimensions = dimensions rt.top = skip.New(uint64(0)) }
func newKeys() *keys { return &keys{ list: skip.New(uint64(0)), } }