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 * typecheck.i
6 *
7 * Typechecking rules
8 * ----------------------------------------------------------------------------- */
9
10%typecheck(SWIG_TYPECHECK_INTEGER) char, signed char, const char &, const signed char & {
11  if( !Is_block($input) ) $1 = 0;
12  else {
13      switch( SWIG_Tag_val($input) ) {
14      case C_char: $1 = 1; break;
15      default: $1 = 0; break;
16      }
17  }
18}
19
20%typecheck(SWIG_TYPECHECK_INTEGER) unsigned char, const unsigned char & {
21  if( !Is_block($input) ) $1 = 0;
22  else {
23      switch( SWIG_Tag_val($input) ) {
24      case C_uchar: $1 = 1; break;
25      default: $1 = 0; break;
26      }
27  }
28}
29
30%typecheck(SWIG_TYPECHECK_INTEGER) short, signed short, const short &, const signed short &, wchar_t {
31  if( !Is_block($input) ) $1 = 0;
32  else {
33      switch( SWIG_Tag_val($input) ) {
34      case C_short: $1 = 1; break;
35      default: $1 = 0; break;
36      }
37  }
38}
39
40%typecheck(SWIG_TYPECHECK_INTEGER) unsigned short, const unsigned short & {
41  if( !Is_block($input) ) $1 = 0;
42  else {
43      switch( SWIG_Tag_val($input) ) {
44      case C_ushort: $1 = 1; break;
45      default: $1 = 0; break;
46      }
47  }
48}
49
50// XXX arty
51// Will move enum SWIGTYPE later when I figure out what to do with it...
52
53%typecheck(SWIG_TYPECHECK_INTEGER) int, signed int, const int &, const signed int &, enum SWIGTYPE {
54  if( !Is_block($input) ) $1 = 0;
55  else {
56      switch( SWIG_Tag_val($input) ) {
57      case C_int: $1 = 1; break;
58      default: $1 = 0; break;
59      }
60  }
61}
62
63%typecheck(SWIG_TYPECHECK_INTEGER) unsigned int, const unsigned int & {
64  if( !Is_block($input) ) $1 = 0;
65  else {
66      switch( SWIG_Tag_val($input) ) {
67      case C_uint: $1 = 1; break;
68      case C_int32: $1 = 1; break;
69      default: $1 = 0; break;
70      }
71  }
72}
73
74%typecheck(SWIG_TYPECHECK_INTEGER) long, signed long, unsigned long, long long, signed long long, unsigned long long, const long &, const signed long &, const unsigned long &, const long long &, const signed long long &, const unsigned long long & {
75  if( !Is_block($input) ) $1 = 0;
76  else {
77      switch( SWIG_Tag_val($input) ) {
78      case C_int64: $1 = 1; break;
79      default: $1 = 0; break;
80      }
81  }
82}
83
84%typecheck(SWIG_TYPECHECK_INTEGER) bool, oc_bool, BOOL, const bool &, const oc_bool &, const BOOL & {
85  if( !Is_block($input) ) $1 = 0;
86  else {
87      switch( SWIG_Tag_val($input) ) {
88      case C_bool: $1 = 1; break;
89      default: $1 = 0; break;
90      }
91  }
92}
93
94%typecheck(SWIG_TYPECHECK_DOUBLE) float, const float & {
95  if( !Is_block($input) ) $1 = 0;
96  else {
97      switch( SWIG_Tag_val($input) ) {
98      case C_float: $1 = 1; break;
99      default: $1 = 0; break;
100      }
101  }
102}
103
104%typecheck(SWIG_TYPECHECK_DOUBLE) double, const double & {
105  if( !Is_block($input) ) $1 = 0;
106  else {
107      switch( SWIG_Tag_val($input) ) {
108      case C_double: $1 = 1; break;
109      default: $1 = 0; break;
110      }
111  }
112}
113
114%typecheck(SWIG_TYPECHECK_STRING) char * {
115  if( !Is_block($input) ) $1 = 0;
116  else {
117      switch( SWIG_Tag_val($input) ) {
118      case C_string: $1 = 1; break;
119      case C_ptr: {
120	swig_type_info *typeinfo =
121	    (swig_type_info *)(long)SWIG_Int64_val(SWIG_Field($input,1));
122	$1 = SWIG_TypeCheck("char *",typeinfo) ||
123	     SWIG_TypeCheck("signed char *",typeinfo) ||
124	     SWIG_TypeCheck("unsigned char *",typeinfo) ||
125	     SWIG_TypeCheck("const char *",typeinfo) ||
126	     SWIG_TypeCheck("const signed char *",typeinfo) ||
127	     SWIG_TypeCheck("const unsigned char *",typeinfo) ||
128	     SWIG_TypeCheck("std::string",typeinfo);
129      } break;
130      default: $1 = 0; break;
131      }
132  }
133}
134
135%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *, SWIGTYPE &, SWIGTYPE [] {
136  void *ptr;
137  $1 = !caml_ptr_val_internal($input, &ptr,$descriptor);
138}
139
140#if 0
141
142%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE {
143  void *ptr;
144  $1 = !caml_ptr_val_internal($input, &ptr, $&1_descriptor);
145}
146
147#endif
148
149%typecheck(SWIG_TYPECHECK_VOIDPTR) void * {
150  void *ptr;
151  $1 = !caml_ptr_val_internal($input, &ptr, 0);
152}
153
154/* ------------------------------------------------------------
155 * Exception handling
156 * ------------------------------------------------------------ */
157
158%typemap(throws) int,
159                  long,
160                  short,
161                  unsigned int,
162                  unsigned long,
163                  unsigned short {
164  SWIG_exception($1,"Thrown exception from C++ (int)");
165}
166
167%typemap(throws) SWIGTYPE CLASS {
168  $&1_ltype temp = new $1_ltype($1);
169  SWIG_exception((int)temp,"Thrown exception from C++ (object)");
170}
171
172%typemap(throws) SWIGTYPE {
173  (void)$1;
174  SWIG_exception(0,"Thrown exception from C++ (unknown)");
175}
176
177%typemap(throws) char * {
178  SWIG_exception(0,$1);
179}
180