12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- %{
- typedef struct SWIGCDATA {
- char *data;
- intgo len;
- } SWIGCDATA;
- %}
- %fragment("cdata", "header") %{
- struct swigcdata {
- intgo size;
- void *data;
- };
- %}
- %typemap(gotype) SWIGCDATA "[]byte"
- %typemap(imtype) SWIGCDATA "uint64"
- %typemap(out, fragment="cdata") SWIGCDATA(struct swigcdata *swig_out) %{
- swig_out = (struct swigcdata *)malloc(sizeof(*swig_out));
- if (swig_out) {
- swig_out->size = $1.len;
- swig_out->data = malloc(swig_out->size);
- if (swig_out->data) {
- memcpy(swig_out->data, $1.data, swig_out->size);
- }
- }
- $result = *(long long *)(void **)&swig_out;
- %}
- %typemap(goout) SWIGCDATA %{
- {
- type swigcdata struct { size int; data uintptr }
- p := (*swigcdata)(unsafe.Pointer(uintptr($1)))
- if p == nil || p.data == 0 {
- $result = nil
- } else {
- b := make([]byte, p.size)
- a := (*[0x7fffffff]byte)(unsafe.Pointer(p.data))[:p.size]
- copy(b, a)
- Swig_free(p.data)
- Swig_free(uintptr(unsafe.Pointer(p)))
- $result = b
- }
- }
- %}
- %define %cdata(TYPE,NAME...)
- %insert("header") {
- #if #NAME == ""
- static SWIGCDATA cdata_##TYPE(TYPE *ptr, int nelements) {
- #else
- static SWIGCDATA cdata_##NAME(TYPE *ptr, int nelements) {
- #endif
- SWIGCDATA d;
- d.data = (char *) ptr;
- #if #TYPE != "void"
- d.len = nelements*sizeof(TYPE);
- #else
- d.len = nelements;
- #endif
- return d;
- }
- }
- %typemap(default) int nelements "$1 = 1;"
- #if #NAME == ""
- SWIGCDATA cdata_##TYPE(TYPE *ptr, int nelements);
- #else
- SWIGCDATA cdata_##NAME(TYPE *ptr, int nelements);
- #endif
- %enddef
- %typemap(default) int nelements;
- %rename(cdata) ::cdata_void(void *ptr, int nelements);
- %cdata(void);
- void memmove(void *data, char *indata, int inlen);
|