1/* ----------------------------------------------------------------------------- 2 * See the LICENSE file for information on copyright, usage and redistribution 3 * of SWIG, and the README file for authors - http://www.swig.org/release.html. 4 * 5 * cdata.i 6 * 7 * SWIG library file containing macros for manipulating raw C data as strings. 8 * ----------------------------------------------------------------------------- */ 9 10%{ 11typedef struct SWIGCDATA { 12 char *data; 13 int len; 14} SWIGCDATA; 15%} 16 17/* ----------------------------------------------------------------------------- 18 * Typemaps for returning binary data 19 * ----------------------------------------------------------------------------- */ 20 21#if SWIGGUILE 22%typemap(out) SWIGCDATA { 23 $result = gh_str2scm($1.data,$1.len); 24} 25%typemap(in) (const void *indata, int inlen) = (char *STRING, int LENGTH); 26#elif SWIGCHICKEN 27%typemap(out) SWIGCDATA { 28 C_word *string_space = C_alloc(C_SIZEOF_STRING($1.len)); 29 $result = C_string(&string_space, $1.len, $1.data); 30} 31%typemap(in) (const void *indata, int inlen) = (char *STRING, int LENGTH); 32#elif SWIGPHP 33%typemap(out) SWIGCDATA { 34 ZVAL_STRINGL($result, $1.data, $1.len, 1); 35} 36%typemap(in) (const void *indata, int inlen) = (char *STRING, int LENGTH); 37#else 38%echo "cdata.i module not supported." 39#endif 40 41 42/* ----------------------------------------------------------------------------- 43 * %cdata(TYPE [, NAME]) 44 * 45 * Convert raw C data to a binary string. 46 * ----------------------------------------------------------------------------- */ 47 48%define %cdata(TYPE,NAME...) 49 50%insert("header") { 51#if #NAME == "" 52static SWIGCDATA cdata_##TYPE(TYPE *ptr, int nelements) { 53#else 54static SWIGCDATA cdata_##NAME(TYPE *ptr, int nelements) { 55#endif 56 SWIGCDATA d; 57 d.data = (char *) ptr; 58#if #TYPE != "void" 59 d.len = nelements*sizeof(TYPE); 60#else 61 d.len = nelements; 62#endif 63 return d; 64} 65} 66 67%typemap(default) int nelements "$1 = 1;" 68 69#if #NAME == "" 70SWIGCDATA cdata_##TYPE(TYPE *ptr, int nelements); 71#else 72SWIGCDATA cdata_##NAME(TYPE *ptr, int nelements); 73#endif 74%enddef 75 76%typemap(default) int nelements; 77 78%rename(cdata) ::cdata_void(void *ptr, int nelements); 79 80%cdata(void); 81 82/* Memory move function */ 83void memmove(void *data, const void *indata, int inlen); 84