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