mirror of
https://github.com/astaxie/beego.git
synced 2024-11-30 04:21:29 +00:00
41 lines
564 B
Go
41 lines
564 B
Go
|
// +build leveldb
|
||
|
|
||
|
package leveldb
|
||
|
|
||
|
// #cgo LDFLAGS: -lleveldb
|
||
|
// #include "leveldb/c.h"
|
||
|
import "C"
|
||
|
|
||
|
import (
|
||
|
"reflect"
|
||
|
"unsafe"
|
||
|
)
|
||
|
|
||
|
type CSlice struct {
|
||
|
data unsafe.Pointer
|
||
|
size int
|
||
|
}
|
||
|
|
||
|
func NewCSlice(p unsafe.Pointer, n int) *CSlice {
|
||
|
return &CSlice{p, n}
|
||
|
}
|
||
|
|
||
|
func (s *CSlice) Data() []byte {
|
||
|
var value []byte
|
||
|
|
||
|
sH := (*reflect.SliceHeader)(unsafe.Pointer(&value))
|
||
|
sH.Cap = int(s.size)
|
||
|
sH.Len = int(s.size)
|
||
|
sH.Data = uintptr(s.data)
|
||
|
|
||
|
return value
|
||
|
}
|
||
|
|
||
|
func (s *CSlice) Size() int {
|
||
|
return int(s.size)
|
||
|
}
|
||
|
|
||
|
func (s *CSlice) Free() {
|
||
|
C.leveldb_free(s.data)
|
||
|
}
|