import source from 1.3.40
[external/swig.git] / Lib / octave / octprimtypes.swg
1 /* ------------------------------------------------------------
2  * Primitive Types
3  * ------------------------------------------------------------ */
4
5
6 // boolean
7
8 %fragment(SWIG_From_frag(bool),"header") {
9 SWIGINTERNINLINE octave_value
10   SWIG_From_dec(bool)(bool value)
11 {
12   return octave_value(value);
13 }
14 }
15
16 %fragment(SWIG_AsVal_frag(bool),"header",
17           fragment=SWIG_AsVal_frag(long)) {
18 SWIGINTERN int
19 SWIG_AsVal_dec(bool)(const octave_value& ov, bool *val)
20 {
21   if (!ov.is_bool_type())
22     return SWIG_ERROR;
23   if (val)
24     *val = ov.bool_value();
25   return SWIG_OK;
26 }
27 }
28
29 // long
30
31 %fragment(SWIG_From_frag(long),"header") {
32   SWIGINTERNINLINE octave_value SWIG_From_dec(long)  (long value)
33     {    
34       return octave_value(value);
35     }
36 }
37
38
39 %fragment(SWIG_AsVal_frag(long),"header") {
40   SWIGINTERN int SWIG_AsVal_dec(long)(const octave_value& ov, long* val)
41     {
42       if (!ov.is_scalar_type())
43         return SWIG_TypeError;
44       if (ov.is_complex_scalar())
45         return SWIG_TypeError;
46       if (ov.is_double_type()||ov.is_single_type()) {
47         double v=ov.double_value();
48         if (v!=floor(v))
49           return SWIG_TypeError;
50       }
51       if (val)
52         *val = ov.long_value();
53       return SWIG_OK;
54     }
55 }
56
57 // unsigned long
58
59 %fragment(SWIG_From_frag(unsigned long),"header") {
60   SWIGINTERNINLINE octave_value SWIG_From_dec(unsigned long)  (unsigned long value)
61     {    
62       return octave_value(value);
63     }
64 }
65
66
67 %fragment(SWIG_AsVal_frag(unsigned long),"header") {
68   SWIGINTERN int SWIG_AsVal_dec(unsigned long)(const octave_value& ov, unsigned long* val)
69     {
70       if (!ov.is_scalar_type())
71         return SWIG_TypeError;
72       if (ov.is_complex_scalar())
73         return SWIG_TypeError;
74       if (ov.is_double_type()||ov.is_single_type()) {
75         double v=ov.double_value();
76         if (v<0)
77           return SWIG_OverflowError;  
78         if (v!=floor(v))
79           return SWIG_TypeError;
80       }
81       if (ov.is_int8_type()||ov.is_int16_type()||
82           ov.is_int32_type()) {
83         long v=ov.long_value();
84         if (v<0)
85           return SWIG_OverflowError;  
86       }
87       if (ov.is_int64_type()) {
88         long long v=ov.int64_scalar_value().value();
89         if (v<0)
90           return SWIG_OverflowError;  
91       }
92       if (val)
93         *val = ov.ulong_value();
94       return SWIG_OK;
95     }
96 }
97
98 // long long
99
100 %fragment(SWIG_From_frag(long long),"header") {
101   SWIGINTERNINLINE octave_value SWIG_From_dec(long long)  (long long value)
102     {    
103       return octave_int64(value);
104     }
105 }
106
107
108 %fragment(SWIG_AsVal_frag(long long),"header") {
109   SWIGINTERN int SWIG_AsVal_dec(long long)(const octave_value& ov, long long* val)
110     {
111       if (!ov.is_scalar_type())
112         return SWIG_TypeError;
113       if (ov.is_complex_scalar())
114         return SWIG_TypeError;
115       if (ov.is_double_type()||ov.is_single_type()) {
116         double v=ov.double_value();
117         if (v!=floor(v))
118           return SWIG_TypeError;
119       }
120       if (val) {
121         if (ov.is_int64_type())
122           *val = ov.int64_scalar_value().value();
123         else if (ov.is_uint64_type())
124           *val = ov.uint64_scalar_value().value();
125         else
126           *val = ov.long_value();
127       }
128       return SWIG_OK;
129     }
130 }
131
132 %fragment(SWIG_From_frag(unsigned long long),"header") {
133   SWIGINTERNINLINE octave_value SWIG_From_dec(unsigned long long)  (unsigned long long value)
134     {    
135       return octave_uint64(value);
136     }
137 }
138
139 %fragment(SWIG_AsVal_frag(unsigned long long),"header") {
140   SWIGINTERN int SWIG_AsVal_dec(unsigned long long)(const octave_value& ov, unsigned long long* val)
141     {
142       if (!ov.is_scalar_type())
143         return SWIG_TypeError;
144       if (ov.is_complex_scalar())
145         return SWIG_TypeError;
146       if (ov.is_double_type()||ov.is_single_type()) {
147         double v=ov.double_value();
148         if (v<0)
149           return SWIG_OverflowError;  
150         if (v!=floor(v))
151           return SWIG_TypeError;
152       }
153       if (ov.is_int8_type()||ov.is_int16_type()||
154           ov.is_int32_type()) {
155         long v=ov.long_value();
156         if (v<0)
157           return SWIG_OverflowError;  
158       }
159       if (ov.is_int64_type()) {
160         long long v=ov.int64_scalar_value().value();
161         if (v<0)
162           return SWIG_OverflowError;  
163       }
164       if (val) {
165         if (ov.is_int64_type())
166           *val = ov.int64_scalar_value().value();
167         else if (ov.is_uint64_type())
168           *val = ov.uint64_scalar_value().value();
169         else
170           *val = ov.long_value();
171       }
172       return SWIG_OK;
173     }
174 }
175
176 // double
177
178 %fragment(SWIG_From_frag(double),"header") {
179   SWIGINTERNINLINE octave_value SWIG_From_dec(double)  (double value)
180     {    
181       return octave_value(value);
182     }
183 }
184
185
186 %fragment(SWIG_AsVal_frag(double),"header") {
187   SWIGINTERN int SWIG_AsVal_dec(double)(const octave_value& ov, double* val)
188     {
189       if (!ov.is_scalar_type())
190         return SWIG_TypeError;
191       if (ov.is_complex_scalar())
192         return SWIG_TypeError;
193       if (val)
194         *val = ov.double_value();
195       return SWIG_OK;
196     }
197 }
198
199 // const char* (strings)
200
201 %fragment("SWIG_AsCharPtrAndSize","header") {
202 SWIGINTERN int
203 SWIG_AsCharPtrAndSize(octave_value ov, char** cptr, size_t* psize, int *alloc)
204 {
205   if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1)
206     ov = ov.cell_value()(0);
207   if (!ov.is_string())
208     return SWIG_TypeError;
209   
210   std::string str=ov.string_value();
211   size_t len=str.size();
212   char* cstr=(char*)str.c_str();
213   if (alloc) {
214     *cptr = %new_copy_array(cstr, len + 1, char);
215     *alloc = SWIG_NEWOBJ;
216   } else if (cptr)
217     *cptr = cstr;
218   if (psize)
219     *psize = len + 1;
220   return SWIG_OK;
221 }
222 }
223
224 %fragment("SWIG_FromCharPtrAndSize","header",fragment="SWIG_pchar_descriptor") {
225 SWIGINTERNINLINE octave_value
226 SWIG_FromCharPtrAndSize(const char* carray, size_t size)
227 {
228   return std::string(carray,carray+size);
229 }
230 }
231
232