comparison equal and no equal
[scilab.git] / scilab / modules / ast / includes / operations / types_comparison_ne.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2011 - DIGITEO - Antoine ELIAS
4 *  Copyright (C) 2015 - Scilab Enterprises - Sylvain GENIN
5 *
6 *  This file must be used under the terms of the CeCILL.
7 *  This source file is licensed as described in the file COPYING, which
8 *  you should have received as part of this distribution.  The terms
9 *  are also available at
10 *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11 *
12 */
13
14 #ifndef __TYPES_COMPARISON_NO_EQUAL_HXX__
15 #define __TYPES_COMPARISON_NO_EQUAL_HXX__
16
17 #include "generic_operations.hxx"
18 #include "internal.hxx"
19 #include "double.hxx"
20 #include "sparse.hxx"
21 #include "polynom.hxx"
22 #include "string.hxx"
23 #include "struct.hxx"
24 #include "cell.hxx"
25 #include "graphichandle.hxx"
26 #include "macrofile.hxx"
27
28 void fillComparisonNoEqualFunction();
29
30 //define arrays on operation functions
31 typedef types::InternalType*(*compnoequal_function)(types::InternalType*, types::InternalType*);
32
33 #define DECLARE_COMPARISON_NO_EQUAL_PROTO(x) template<class T, class U, class O> types::InternalType* x(T *_pL, U *_pR)
34
35
36 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_M_M);
37 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_M_MC);
38 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_M_S);
39 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_M_SC);
40 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_M_E);
41 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_M_I);
42 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_M_IC);
43
44 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_MC_M);
45 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_MC_MC);
46 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_MC_S);
47 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_MC_SC);
48 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_MC_I);
49 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_MC_IC);
50
51 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_S_M);
52 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_S_MC);
53 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_S_S);
54 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_S_SC);
55 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_S_I);
56 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_S_IC);
57
58 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_SC_M);
59 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_SC_MC);
60 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_SC_S);
61 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_SC_SC);
62 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_SC_I);
63 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_SC_IC);
64
65 //[]
66 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_E_M);
67 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_E_E);
68
69 //eye
70 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_I_M);
71 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_I_MC);
72 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_I_S);
73 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_I_SC);
74 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_I_I);
75 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_I_IC);
76
77 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_IC_M);
78 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_IC_MC);
79 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_IC_S);
80 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_IC_SC);
81 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_IC_I);
82 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_IC_IC);
83
84 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_P_M);
85 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_M_P);
86
87 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_SP_M);
88 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_M_SP);
89
90 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_B_M);
91 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_M_B);
92 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_B_S);
93 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_S_B);
94
95 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_LT_LT);
96
97 DECLARE_COMPARISON_NO_EQUAL_PROTO(compnoequal_MCR_MCR);
98
99
100 #undef DECLARE_COMPARISON_NO_EQUAL_PROTO
101
102 template<> types::InternalType* compnoequal_M_M<types::Sparse, types::Sparse, types::SparseBool>(types::Sparse* _pL, types::Sparse* _pR);
103
104 template<> types::InternalType* compnoequal_M_M<types::Polynom, types::Polynom, types::Bool>(types::Polynom* _pL, types::Polynom* _pR);
105
106 template<> types::InternalType* compnoequal_M_M<types::String, types::String, types::Bool>(types::String* _pL, types::String* _pR);
107
108 template<> types::InternalType* compnoequal_M_M<types::Struct, types::Struct, types::Bool>(types::Struct* _pL, types::Struct* _pR);
109
110 template<> types::InternalType* compnoequal_M_M<types::Cell, types::Cell, types::Bool>(types::Cell* _pL, types::Cell* _pR);
111
112 template<> types::InternalType* compnoequal_M_M<types::GraphicHandle, types::GraphicHandle, types::Bool>(types::GraphicHandle* _pL, types::GraphicHandle* _pR);
113
114 template<> types::InternalType* compnoequal_M_M<types::SparseBool, types::SparseBool, types::SparseBool>(types::SparseBool* _pL, types::SparseBool* _pR);
115 template<> types::InternalType* compnoequal_M_M<types::Bool, types::SparseBool, types::SparseBool>(types::Bool* _pL, types::SparseBool* _pR);
116 template<> types::InternalType* compnoequal_M_M<types::SparseBool, types::Bool, types::SparseBool>(types::SparseBool* _pL, types::Bool* _pR);
117
118 //x1 != x1
119 template<typename T, typename U, typename O> inline static void compnoequal(T l, U r, O* o)
120 {
121     *o = ((T)l != (U)r);
122 }
123
124 //X != X
125 template<typename T, typename U, typename O> inline static void compnoequal(T* l, size_t size, U* r, O* o)
126 {
127     for (size_t i = 0; i < size; ++i)
128     {
129         compnoequal((T)l[i], (U)r[i], &o[i]);
130     }
131 }
132
133 //x != X
134 template<typename T, typename U, typename O> inline static void compnoequal(T l, size_t size, U* r, O* o)
135 {
136     for (size_t i = 0; i < size; ++i)
137     {
138         compnoequal((T)l, (U)r[i], &o[i]);
139     }
140 }
141
142 //X != x
143 template<typename T, typename U, typename O> inline static void compnoequal(T* l, size_t size, U r, O* o)
144 {
145     for (size_t i = 0; i < size; ++i)
146     {
147         compnoequal((T)l[i], (U)r, &o[i]);
148     }
149 }
150
151 //x1c != x1c
152 template<typename T, typename U, typename O> inline static void compnoequal(T l, T lc, U r, U rc, O* o)
153 {
154     *o = (((T)l != (U)r) || ((T)lc != (U)rc));
155 }
156
157 //X1c != X1c
158 template<typename T, typename U, typename O> inline static void compnoequal(T* l, T* lc, size_t size, U* r, U* rc, O* o)
159 {
160     for (size_t i = 0; i < size; ++i)
161     {
162         compnoequal((T)l[i], (T)lc[i], (U)r[i], (U)rc[i], &o[i]);
163     }
164 }
165
166 //X1c != x1c
167 template<typename T, typename U, typename O> inline static void compnoequal(T* l, T* lc, size_t size, U r, U rc, O* o)
168 {
169     for (size_t i = 0; i < size; ++i)
170     {
171         compnoequal((T)l[i], (T)lc[i], (U)r, (U)rc, &o[i]);
172     }
173 }
174
175 //x1c != X1c
176 template<typename T, typename U, typename O> inline static void compnoequal(T l, T lc, size_t size, U* r, U* rc, O* o)
177 {
178     for (size_t i = 0; i < size; ++i)
179     {
180         compnoequal((T)l, (T)lc, (U)r[i], (U)rc[i], &o[i]);
181     }
182 }
183
184 //X1 != X1c
185 template<typename T, typename U, typename O> inline static void compnoequal(T* l, size_t size, U* r, U* rc, O* o)
186 {
187     for (size_t i = 0; i < size; ++i)
188     {
189         compnoequal((T)l[i], (T)0, (U)r[i], (U)rc[i], &o[i]);
190     }
191 }
192
193 //X1 != x1c
194 template<typename T, typename U, typename O> inline static void compnoequal(T* l, size_t size, U r, U rc, O* o)
195 {
196     for (size_t i = 0; i < size; ++i)
197     {
198         compnoequal((T)l[i], (T)0, (U)r, (U)rc, &o[i]);
199     }
200 }
201
202 //x1 != X1c
203 template<typename T, typename U, typename O> inline static void compnoequal(T l, size_t size, U* r, U* rc, O* o)
204 {
205     for (size_t i = 0; i < size; ++i)
206     {
207         compnoequal((T)l, (T)0, (U)r[i], (U)rc[i], &o[i]);
208     }
209 }
210
211 //X1c != X1
212 template<typename T, typename U, typename O> inline static void compnoequal(T* l, T* lc, size_t size, U* r, O* o)
213 {
214     for (size_t i = 0; i < size; ++i)
215     {
216         compnoequal((T)l[i], (T)lc[i], (U)r[i], (U)0, &o[i]);
217     }
218 }
219
220 //X1c != x1
221 template<typename T, typename U, typename O> inline static void compnoequal(T* l, T* lc, size_t size, U r, O* o)
222 {
223     for (size_t i = 0; i < size; ++i)
224     {
225         compnoequal((T)l[i], (T)lc[i], (U)r, (U)0, &o[i]);
226     }
227 }
228
229 //x1c != X1
230 template<typename T, typename U, typename O> inline static void compnoequal(T l, T lc, size_t size, U* r, O* o)
231 {
232     for (size_t i = 0; i < size; ++i)
233     {
234         compnoequal((T)l, (T)lc, (U)r[i], (U)0, &o[i]);
235     }
236 }
237
238 #endif /* !__TYPES_COMPARISON_NO_EQUAL_HXX__ */