[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]

matlab_FLEXTYPE.hxx VIGRA

1 /************************************************************************/
2 /* */
3 /* Copyright 2009 by Rahul Nair */
4 /* */
5 /* This file is part of the VIGRA computer vision library. */
6 /* The VIGRA Website is */
7 /* http://hci.iwr.uni-heidelberg.de/vigra/ */
8 /* Please direct questions, bug reports, and contributions to */
9 /* ullrich.koethe@iwr.uni-heidelberg.de or */
10 /* vigra@informatik.uni-hamburg.de */
11 /* */
12 /* Permission is hereby granted, free of charge, to any person */
13 /* obtaining a copy of this software and associated documentation */
14 /* files (the "Software"), to deal in the Software without */
15 /* restriction, including without limitation the rights to use, */
16 /* copy, modify, merge, publish, distribute, sublicense, and/or */
17 /* sell copies of the Software, and to permit persons to whom the */
18 /* Software is furnished to do so, subject to the following */
19 /* conditions: */
20 /* */
21 /* The above copyright notice and this permission notice shall be */
22 /* included in all copies or substantial portions of the */
23 /* Software. */
24 /* */
25 /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND */
26 /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES */
27 /* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND */
28 /* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT */
29 /* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, */
30 /* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING */
31 /* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR */
32 /* OTHER DEALINGS IN THE SOFTWARE. */
33 /* */
34 /************************************************************************/
35 
36 #include <string>
37 #ifndef MATLAB_FLEXTYPE
38 #define MATLAB_FLEXTYPE
39 
40 
41 
42 #define NOFLEXIBLETYPE vigraMain(outputs, inputs);
43 
44 
45 #define FLEX_TYPE(inClass, pos, name)\
46  std::string name_str(#name);\
47  if ((1##pos##1) != 0 && ((pos < inputs.size()-1) || pos == (inputs.size()-1) && !inputs.options_.isValid()))\
48  {\
49  inClass = mxGetClassID(inputs[pos]);\
50  }\
51  else\
52  {\
53  if(!inputs.options_.isValid())\
54  mexErrMsgTxt("Input at (Position: pos, Name in Struct: name) not set");\
55  inClass = mxGetClassID(inputs.options_[#name]);\
56  }\
57 
58 #define DEFAULT_ERROR\
59  default:\
60  std::string msg = "Invalid Inputtype for data element '" + name_str + "' - see documentation for supported Types";\
61  mexErrMsgTxt(msg.c_str());\
62 
63 
64 #define FLEXIBLE_TYPE_START(pos, name)\
65  mxClassID inClass;\
66  std::string name_str(#name);\
67  if ((1##pos##1) != 0 && ((pos < inputs.size()-1) || pos == (inputs.size()-1) && !inputs.options_.isValid()))\
68  {\
69  inClass = mxGetClassID(inputs[pos]);\
70  }\
71  else\
72  {\
73  if(!inputs.options_.isValid())\
74  mexErrMsgTxt("Input at (Position: pos, Name in Struct: name) not set");\
75  inClass = mxGetClassID(inputs.options_[#name]);\
76  }\
77  switch(inClass){\
78 
79 
80 
81 #define FLEXIBLE_TYPE_END\
82  default:\
83  std::string msg = "Invalid Inputtype for data element " + name_str + " - see documentation for supported Types";\
84  mexErrMsgTxt(msg.c_str());\
85  }
86 
87 
88 /*UINT*/
89 
90 #define ALLOW_UINT\
91  case mxUINT8_CLASS:\
92  vigraMain<UInt8>(outputs, inputs); break;\
93  case mxUINT16_CLASS:\
94  vigraMain<UInt16>(outputs, inputs); break;\
95  case mxUINT32_CLASS:\
96  vigraMain<UInt32>(outputs, inputs); break;\
97  case mxUINT64_CLASS:\
98  vigraMain<UInt64>(outputs, inputs); break;
99 
100 
101 #define ALLOW_UINT_8\
102  case mxUINT8_CLASS:\
103  vigraMain<UInt8>(outputs, inputs); break;
104 
105 #define ALLOW_UINT_16\
106  case mxUINT16_CLASS:\
107  vigraMain<UInt16>(outputs, inputs); break;
108 
109 #define ALLOW_UINT_32\
110  case mxUINT32_CLASS:\
111  vigraMain<UInt32>(outputs, inputs); break;
112 
113 #define ALLOW_UINT_64\
114  case mxUINT64_CLASS:\
115  vigraMain<UInt64>(outputs, inputs); break;
116 
117 #define ALLOW_UINT_8_16\
118  case mxUINT8_CLASS:\
119  vigraMain<UInt8>(outputs, inputs); break;\
120  case mxUINT16_CLASS:\
121  vigraMain<UInt16>(outputs, inputs); break;
122 
123 #define ALLOW_UINT_16_32\
124  case mxUINT16_CLASS:\
125  vigraMain<UInt16>(outputs, inputs); break;\
126  case mxUINT32_CLASS:\
127  vigraMain<UInt32>(outputs, inputs); break;
128 
129 #define ALLOW_UINT_32_64\
130  case mxUINT16_CLASS:\
131  vigraMain<UInt32>(outputs, inputs); break;\
132  case mxUINT32_CLASS:\
133  vigraMain<UInt64>(outputs, inputs); break;
134 
135 #define ALLOW_UINT_8_32\
136  case mxUINT8_CLASS:\
137  vigraMain<UInt8>(outputs, inputs); break;\
138  case mxUINT16_CLASS:\
139  vigraMain<UInt16>(outputs, inputs); break;\
140  case mxUINT32_CLASS:\
141  vigraMain<UInt32>(outputs, inputs); break;
142 
143 #define ALLOW_UINT_16_64\
144  case mxUINT16_CLASS:\
145  vigraMain<UInt16>(outputs, inputs); break;\
146  case mxUINT32_CLASS:\
147  vigraMain<UInt32>(outputs, inputs); break;\
148  case mxUINT64_CLASS:\
149  vigraMain<UInt64>(outputs, inputs); break;
150 
151 
152 /*INT*/
153 #define ALLOW_INT\
154  case mxINT8_CLASS:\
155  vigraMain<Int8>(outputs, inputs); break;\
156  case mxINT16_CLASS:\
157  vigraMain<Int16>(outputs, inputs); break;\
158  case mxINT32_CLASS:\
159  vigraMain<Int32>(outputs, inputs); break;\
160  case mxINT64_CLASS:\
161  vigraMain<Int64>(outputs, inputs); break;
162 
163 #define ALLOW_INT_8_64 ALLOW_INT;
164 #define ALLOW_UINT_8_64 ALLOW_UINT;
165 
166 #define ALLOW_INT_8\
167  case mxINT8_CLASS:\
168  vigraMain<Int8>(outputs, inputs); break;
169 
170 #define ALLOW_INT_16\
171  case mxINT16_CLASS:\
172  vigraMain<Int16>(outputs, inputs); break;
173 
174 #define ALLOW_INT_32\
175  case mxINT32_CLASS:\
176  vigraMain<Int32>(outputs, inputs); break;
177 
178 #define ALLOW_INT_64\
179  case mxINT64_CLASS:\
180  vigraMain<Int64>(outputs, inputs); break;
181 
182 #define ALLOW_INT_8_16\
183  case mxINT8_CLASS:\
184  vigraMain<Int8>(outputs, inputs); break;\
185  case mxINT16_CLASS:\
186  vigraMain<Int16>(outputs, inputs); break;
187 
188 #define ALLOW_INT_16_32\
189  case mxINT16_CLASS:\
190  vigraMain<Int16>(outputs, inputs); break;\
191  case mxINT32_CLASS:\
192  vigraMain<Int32>(outputs, inputs); break;
193 
194 #define ALLOW_INT_32_64\
195  case mxINT16_CLASS:\
196  vigraMain<Int32>(outputs, inputs); break;\
197  case mxINT32_CLASS:\
198  vigraMain<Int64>(outputs, inputs); break;
199 
200 #define ALLOW_INT_8_32\
201  case mxINT8_CLASS:\
202  vigraMain<Int8>(outputs, inputs); break;\
203  case mxINT16_CLASS:\
204  vigraMain<Int16>(outputs, inputs); break;\
205  case mxINT32_CLASS:\
206  vigraMain<Int32>(outputs, inputs); break;
207 
208 #define ALLOW_INT_16_64\
209  case mxINT16_CLASS:\
210  vigraMain<Int16>(outputs, inputs); break;\
211  case mxINT32_CLASS:\
212  vigraMain<Int32>(outputs, inputs); break;\
213  case mxINT64_CLASS:\
214  vigraMain<Int64>(outputs, inputs); break;
215 
216 /*Float double*/
217 
218 #define ALLOW_FD\
219  case mxDOUBLE_CLASS:\
220  vigraMain<double>(outputs, inputs); break;\
221  case mxSINGLE_CLASS:\
222  vigraMain<float>(outputs, inputs); break;
223 
224 #define ALLOW_F\
225  case mxSINGLE_CLASS:\
226  vigraMain<float>(outputs, inputs); break;
227 
228 #define ALLOW_D\
229  case mxDOUBLE_CLASS:\
230  vigraMain<double>(outputs, inputs); break;
231 
232 #endif

© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de)
Heidelberg Collaboratory for Image Processing, University of Heidelberg, Germany

html generated using doxygen and Python
vigra 1.11.1 (Fri May 19 2017)