func create2(a *lldb.Allocator, data ...interface{}) (h int64, err error) { b, err := lldb.EncodeScalars(data...) if err != nil { return } return a.Alloc(b) }
func verifyAllocator(a *lldb.Allocator) error { bits, err := ioutil.TempFile("", "kv-verify-") if err != nil { return err } defer func() { nm := bits.Name() bits.Close() os.Remove(nm) }() var lerr error if err = a.Verify( lldb.NewSimpleFileFiler(bits), func(err error) bool { lerr = err return false }, nil, ); err != nil { return err } if lerr != nil { return lerr } t, err := lldb.OpenBTree(a, nil, 1) if err != nil { return err } e, err := t.SeekFirst() if err != nil { if err == io.EOF { err = nil } return err } for { _, _, err := e.Next() if err != nil { if err == io.EOF { err = nil } return err } } }
func read2(a *lldb.Allocator, dst []interface{}, h int64, cols ...*col) (data []interface{}, err error) { b, err := a.Get(nil, h) if err != nil { return } rec, err := lldb.DecodeScalars(b) if err != nil { return } for _, col := range cols { i := col.index + 2 switch col.typ { case 0: case qBool: case qComplex64: rec[i] = complex64(rec[i].(complex128)) case qComplex128: case qFloat32: rec[i] = float32(rec[i].(float64)) case qFloat64: case qInt8: rec[i] = int8(rec[i].(int64)) case qInt16: rec[i] = int16(rec[i].(int64)) case qInt32: rec[i] = int32(rec[i].(int64)) case qInt64: case qString: case qUint8: rec[i] = uint8(rec[i].(uint64)) case qUint16: rec[i] = uint16(rec[i].(uint64)) case qUint32: rec[i] = uint32(rec[i].(uint64)) case qUint64: default: log.Panic("internal error") } } return rec, nil }