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)
 | 
						|
}
 |