forked from mirror/ledisdb
45 lines
665 B
Go
45 lines
665 B
Go
// +build hyperleveldb
|
|
|
|
package hyperleveldb
|
|
|
|
// #include "hyperleveldb/c.h"
|
|
import "C"
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"unsafe"
|
|
)
|
|
|
|
func boolToUchar(b bool) C.uchar {
|
|
uc := C.uchar(0)
|
|
if b {
|
|
uc = C.uchar(1)
|
|
}
|
|
return uc
|
|
}
|
|
|
|
func ucharToBool(uc C.uchar) bool {
|
|
if uc == C.uchar(0) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
func saveError(errStr *C.char) error {
|
|
if errStr != nil {
|
|
gs := C.GoString(errStr)
|
|
C.leveldb_free(unsafe.Pointer(errStr))
|
|
return fmt.Errorf(gs)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func slice(p unsafe.Pointer, n int) []byte {
|
|
var b []byte
|
|
pbyte := (*reflect.SliceHeader)(unsafe.Pointer(&b))
|
|
pbyte.Data = uintptr(p)
|
|
pbyte.Len = n
|
|
pbyte.Cap = n
|
|
return b
|
|
}
|