PageRenderTime 69ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/go/cdata.i

#
Swig | 64 lines | 40 code | 11 blank | 13 comment | 0 complexity | a610a2dcaeb8751b2fe4571553f0e38e MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /* -----------------------------------------------------------------------------
  2. * cdata.i
  3. *
  4. * SWIG library file containing macros for manipulating raw C data as strings.
  5. * ----------------------------------------------------------------------------- */
  6. %{
  7. typedef struct SWIGCDATA {
  8. char *data;
  9. int len;
  10. } SWIGCDATA;
  11. %}
  12. %typemap(gotype) SWIGCDATA %{ []byte %}
  13. %typemap(out) SWIGCDATA %{
  14. $result.data = (char*)_swig_goallocate($1.len);
  15. memcpy($result.data, $1.data, $1.len);
  16. $result.len = (int)$1.len;
  17. %}
  18. /* -----------------------------------------------------------------------------
  19. * %cdata(TYPE [, NAME])
  20. *
  21. * Convert raw C data to a binary string.
  22. * ----------------------------------------------------------------------------- */
  23. %define %cdata(TYPE,NAME...)
  24. %insert("header") {
  25. #if #NAME == ""
  26. static SWIGCDATA cdata_##TYPE(TYPE *ptr, int nelements) {
  27. #else
  28. static SWIGCDATA cdata_##NAME(TYPE *ptr, int nelements) {
  29. #endif
  30. SWIGCDATA d;
  31. d.data = (char *) ptr;
  32. #if #TYPE != "void"
  33. d.len = nelements*sizeof(TYPE);
  34. #else
  35. d.len = nelements;
  36. #endif
  37. return d;
  38. }
  39. }
  40. %typemap(default) int nelements "$1 = 1;"
  41. #if #NAME == ""
  42. SWIGCDATA cdata_##TYPE(TYPE *ptr, int nelements);
  43. #else
  44. SWIGCDATA cdata_##NAME(TYPE *ptr, int nelements);
  45. #endif
  46. %enddef
  47. %typemap(default) int nelements;
  48. %rename(cdata) ::cdata_void(void *ptr, int nelements);
  49. %cdata(void);
  50. /* Memory move function. Due to multi-argument typemaps this appears
  51. to be wrapped as
  52. void memmove(void *data, const char *s); */
  53. void memmove(void *data, char *indata, int inlen);