1// +build leveldb 2 3package leveldb 4 5// #cgo LDFLAGS: -lleveldb 6// #include "leveldb/c.h" 7import "C" 8 9import ( 10 "reflect" 11 "unsafe" 12) 13 14type CSlice struct { 15 data unsafe.Pointer 16 size int 17} 18 19func NewCSlice(p unsafe.Pointer, n int) *CSlice { 20 return &CSlice{p, n} 21} 22 23func (s *CSlice) Data() []byte { 24 var value []byte 25 26 sH := (*reflect.SliceHeader)(unsafe.Pointer(&value)) 27 sH.Cap = int(s.size) 28 sH.Len = int(s.size) 29 sH.Data = uintptr(s.data) 30 31 return value 32} 33 34func (s *CSlice) Size() int { 35 return int(s.size) 36} 37 38func (s *CSlice) Free() { 39 C.leveldb_free(s.data) 40} 41