-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathutil_c.go
More file actions
30 lines (24 loc) · 689 Bytes
/
util_c.go
File metadata and controls
30 lines (24 loc) · 689 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package magick
// #include <stdlib.h>
// #include <string.h>
import "C"
import (
"unsafe"
)
func allocDoublePtr(size int) *C.double {
return (*C.double)(C.malloc(C.size_t(unsafe.Sizeof(C.double(0)) * uintptr(size))))
}
func doublePtrToFloat64Slice(p *C.double, n int) []float64 {
s := make([]float64, n)
C.memcpy(unsafe.Pointer(&s[0]), unsafe.Pointer(p), C.size_t(unsafe.Sizeof(C.double(0))*uintptr(n)))
return s
}
func float64SliceToDoublePtr(v []float64) *C.double {
sz := C.size_t(unsafe.Sizeof(C.double(0)) * uintptr(len(v)))
p := C.malloc(sz)
C.memcpy(p, unsafe.Pointer(&v[0]), sz)
return (*C.double)(p)
}
func freeDoublePtr(p *C.double) {
C.free(unsafe.Pointer(p))
}