Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ShLibBooleanImpl.hpp

00001 // Sh: A GPU metaprogramming language.
00002 //
00003 // Copyright 2003-2005 Serious Hack Inc.
00004 // 
00005 // This library is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU Lesser General Public
00007 // License as published by the Free Software Foundation; either
00008 // version 2.1 of the License, or (at your option) any later version.
00009 //
00010 // This library is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013 // Lesser General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU Lesser General Public
00016 // License along with this library; if not, write to the Free Software
00017 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
00018 // MA  02110-1301, USA
00020 #ifndef SHLIBBOOLEANIMPL_HPP
00021 #define SHLIBBOOLEANIMPL_HPP
00022 
00023 #include "ShLibBoolean.hpp"
00024 #include "ShInstructions.hpp"
00025 #include "ShAttrib.hpp"
00026 
00027 namespace SH {
00028 
00029 template<int N, typename T1, typename T2>
00030 ShGeneric<N, CT1T2> operator<(const ShGeneric<N, T1>& left, const ShGeneric<N, T2>& right)
00031 {
00032   ShAttrib<N, SH_TEMP, CT1T2> t;
00033   shSLT(t, left, right);
00034   return t;
00035 }
00036 template<int N, typename T1, typename T2>
00037 ShGeneric<N, CT1T2> operator<(const ShGeneric<N, T1>& left, const ShGeneric<1, T2>& right)
00038 {
00039   ShAttrib<N, SH_TEMP, CT1T2> t;
00040   shSLT(t, left, right);
00041   return t;
00042 }
00043 template<int N, typename T1, typename T2>
00044 ShGeneric<N, CT1T2> operator<(const ShGeneric<1, T1>& left, const ShGeneric<N, T2>& right)
00045 {
00046   ShAttrib<N, SH_TEMP, CT1T2> t;
00047   shSLT(t, left, right);
00048   return t;
00049 }
00050 template<typename T1, typename T2>
00051 ShGeneric<1, CT1T2> operator<(const ShGeneric<1, T1>& left, const ShGeneric<1, T2>& right)
00052 {
00053   ShAttrib<1, SH_TEMP, CT1T2> t;
00054   shSLT(t, left, right);
00055   return t;
00056 }
00057 SH_SHLIB_CONST_SCALAR_OP(operator<);
00058 SH_SHLIB_CONST_N_OP_BOTH(operator<);
00059 
00060 template<int N, typename T1, typename T2>
00061 ShGeneric<N, CT1T2> operator<=(const ShGeneric<N, T1>& left, const ShGeneric<N, T2>& right)
00062 {
00063   ShAttrib<N, SH_TEMP, CT1T2> t;
00064   shSLE(t, left, right);
00065   return t;
00066 }
00067 template<int N, typename T1, typename T2>
00068 ShGeneric<N, CT1T2> operator<=(const ShGeneric<N, T1>& left, const ShGeneric<1, T2>& right)
00069 {
00070   ShAttrib<N, SH_TEMP, CT1T2> t;
00071   shSLE(t, left, right);
00072   return t;
00073 }
00074 template<int N, typename T1, typename T2>
00075 ShGeneric<N, CT1T2> operator<=(const ShGeneric<1, T1>& left, const ShGeneric<N, T2>& right)
00076 {
00077   ShAttrib<N, SH_TEMP, CT1T2> t;
00078   shSLE(t, left, right);
00079   return t;
00080 }
00081 template<typename T1, typename T2>
00082 ShGeneric<1, CT1T2> operator<=(const ShGeneric<1, T1>& left, const ShGeneric<1, T2>& right)
00083 {
00084   ShAttrib<1, SH_TEMP, CT1T2> t;
00085   shSLE(t, left, right);
00086   return t;
00087 }
00088 SH_SHLIB_CONST_SCALAR_OP(operator<=);
00089 SH_SHLIB_CONST_N_OP_BOTH(operator<=);
00090 
00091 template<int N, typename T1, typename T2>
00092 ShGeneric<N, CT1T2> operator>(const ShGeneric<N, T1>& left, const ShGeneric<N, T2>& right)
00093 {
00094   ShAttrib<N, SH_TEMP, CT1T2> t;
00095   shSGT(t, left, right);
00096   return t;
00097 }
00098 template<int N, typename T1, typename T2>
00099 ShGeneric<N, CT1T2> operator>(const ShGeneric<N, T1>& left, const ShGeneric<1, T2>& right)
00100 {
00101   ShAttrib<N, SH_TEMP, CT1T2> t;
00102   shSGT(t, left, right);
00103   return t;
00104 }
00105 template<int N, typename T1, typename T2>
00106 ShGeneric<N, CT1T2> operator>(const ShGeneric<1, T1>& left, const ShGeneric<N, T2>& right)
00107 {
00108   ShAttrib<N, SH_TEMP, CT1T2> t;
00109   shSGT(t, left, right);
00110   return t;
00111 }
00112 template<typename T1, typename T2>
00113 ShGeneric<1, CT1T2> operator>(const ShGeneric<1, T1>& left, const ShGeneric<1, T2>& right)
00114 {
00115   ShAttrib<1, SH_TEMP, CT1T2> t;
00116   shSGT(t, left, right);
00117   return t;
00118 }
00119 SH_SHLIB_CONST_SCALAR_OP(operator>);
00120 SH_SHLIB_CONST_N_OP_BOTH(operator>);
00121 
00122 template<int N, typename T1, typename T2>
00123 ShGeneric<N, CT1T2> operator>=(const ShGeneric<N, T1>& left, const ShGeneric<N, T2>& right)
00124 {
00125   ShAttrib<N, SH_TEMP, CT1T2> t;
00126   shSGE(t, left, right);
00127   return t;
00128 }
00129 template<int N, typename T1, typename T2>
00130 ShGeneric<N, CT1T2> operator>=(const ShGeneric<N, T1>& left, const ShGeneric<1, T2>& right)
00131 {
00132   ShAttrib<N, SH_TEMP, CT1T2> t;
00133   shSGE(t, left, right);
00134   return t;
00135 }
00136 template<int N, typename T1, typename T2>
00137 ShGeneric<N, CT1T2> operator>=(const ShGeneric<1, T1>& left, const ShGeneric<N, T2>& right)
00138 {
00139   ShAttrib<N, SH_TEMP, CT1T2> t;
00140   shSGE(t, left, right);
00141   return t;
00142 }
00143 template<typename T1, typename T2>
00144 ShGeneric<1, CT1T2> operator>=(const ShGeneric<1, T1>& left, const ShGeneric<1, T2>& right)
00145 {
00146   ShAttrib<1, SH_TEMP, CT1T2> t;
00147   shSGE(t, left, right);
00148   return t;
00149 }
00150 SH_SHLIB_CONST_SCALAR_OP(operator>=);
00151 SH_SHLIB_CONST_N_OP_BOTH(operator>=);
00152 
00153 template<int N, typename T1, typename T2>
00154 ShGeneric<N, CT1T2> operator==(const ShGeneric<N, T1>& left, const ShGeneric<N, T2>& right)
00155 {
00156   ShAttrib<N, SH_TEMP, CT1T2> t;
00157   shSEQ(t, left, right);
00158   return t;
00159 }
00160 template<int N, typename T1, typename T2>
00161 ShGeneric<N, CT1T2> operator==(const ShGeneric<N, T1>& left, const ShGeneric<1, T2>& right)
00162 {
00163   ShAttrib<N, SH_TEMP, CT1T2> t;
00164   shSEQ(t, left, right);
00165   return t;
00166 }
00167 template<int N, typename T1, typename T2>
00168 ShGeneric<N, CT1T2> operator==(const ShGeneric<1, T1>& left, const ShGeneric<N, T2>& right)
00169 {
00170   ShAttrib<N, SH_TEMP, CT1T2> t;
00171   shSEQ(t, left, right);
00172   return t;
00173 }
00174 template<typename T1, typename T2>
00175 ShGeneric<1, CT1T2> operator==(const ShGeneric<1, T1>& left, const ShGeneric<1, T2>& right)
00176 {
00177   ShAttrib<1, SH_TEMP, CT1T2> t;
00178   shSEQ(t, left, right);
00179   return t;
00180 }
00181 SH_SHLIB_CONST_SCALAR_OP(operator==);
00182 SH_SHLIB_CONST_N_OP_BOTH(operator==);
00183 
00184 template<int N, typename T1, typename T2>
00185 ShGeneric<N, CT1T2> operator!=(const ShGeneric<N, T1>& left, const ShGeneric<N, T2>& right)
00186 {
00187   ShAttrib<N, SH_TEMP, CT1T2> t;
00188   shSNE(t, left, right);
00189   return t;
00190 }
00191 template<int N, typename T1, typename T2>
00192 ShGeneric<N, CT1T2> operator!=(const ShGeneric<N, T1>& left, const ShGeneric<1, T2>& right)
00193 {
00194   ShAttrib<N, SH_TEMP, CT1T2> t;
00195   shSNE(t, left, right);
00196   return t;
00197 }
00198 template<int N, typename T1, typename T2>
00199 ShGeneric<N, CT1T2> operator!=(const ShGeneric<1, T1>& left, const ShGeneric<N, T2>& right)
00200 {
00201   ShAttrib<N, SH_TEMP, CT1T2> t;
00202   shSNE(t, left, right);
00203   return t;
00204 }
00205 template<typename T1, typename T2>
00206 ShGeneric<1, CT1T2> operator!=(const ShGeneric<1, T1>& left, const ShGeneric<1, T2>& right)
00207 {
00208   ShAttrib<1, SH_TEMP, CT1T2> t;
00209   shSNE(t, left, right);
00210   return t;
00211 }
00212 SH_SHLIB_CONST_SCALAR_OP(operator!=);
00213 SH_SHLIB_CONST_N_OP_BOTH(operator!=);
00214 
00215 template<int N, typename T1, typename T2, typename T3>
00216 ShGeneric<N, CT1T2T3> cond(const ShGeneric<N, T1>& condition, 
00217                            const ShGeneric<N, T2>& left,
00218                            const ShGeneric<N, T3>& right)
00219 {
00220   ShAttrib<N, SH_TEMP, CT1T2T3> t;
00221   shCOND(t, condition, left, right);
00222   return t;
00223 }
00224 template<int N, typename T1, typename T2, typename T3>
00225 ShGeneric<N, CT1T2T3> cond(const ShGeneric<1, T1>& condition,
00226                            const ShGeneric<N, T2>& left,
00227                            const ShGeneric<N, T3>& right)
00228 {
00229   ShAttrib<N, SH_TEMP, CT1T2T3> t;
00230   shCOND(t, condition, left, right);
00231   return t;
00232 }
00233 template<typename T1, typename T2, typename T3>
00234 ShGeneric<1, CT1T2T3> cond(const ShGeneric<1, T1>& condition, 
00235                            const ShGeneric<1, T2>& left,
00236                            const ShGeneric<1, T3>& right)
00237 {
00238   ShAttrib<1, SH_TEMP, CT1T2T3> t;
00239   shCOND(t, condition, left, right);
00240   return t;
00241 }
00242 template<int N, typename T1, typename T2>
00243 ShGeneric<N, CT1T2> cond(const CT1T2& condition, 
00244                          const ShGeneric<N, T1>& left, 
00245                          const ShGeneric<N, T2>& right)
00246 {
00247   ShAttrib<N, SH_TEMP, CT1T2> t;
00248   shCOND(t, ShAttrib<1, SH_CONST, CT1T2>(condition), left, right);
00249   return t;
00250 }
00251 
00252 template<int N, typename T>
00253 ShGeneric<N, T> operator!(const ShGeneric<N, T>& a)
00254 {
00255   return 1.0f - (a > 0.0f);
00256 }
00257 
00258 
00259 template<int N, typename T1, typename T2>
00260 ShGeneric<N, CT1T2> operator&&(const ShGeneric<N, T1>& a, const ShGeneric<N, T2>& b)
00261 {
00262   return min(a,b);
00263 }
00264 
00265 template<int N, typename T1, typename T2>
00266 ShGeneric<N, CT1T2> operator||(const ShGeneric<N, T1>& a, const ShGeneric<N, T2>& b)
00267 {
00268   return max(a,b);
00269 }
00270 
00271 template<int N, typename T>
00272 ShGeneric<1, T> any(const ShGeneric<N, T>& a)
00273 {
00274   ShAttrib<1, SH_TEMP, T> t = a(0);
00275   for (int i = 1; i < N; i++) {
00276     t = t || a(i);
00277   }
00278   return t;
00279 }
00280 
00281 template<int N, typename T>
00282 ShGeneric<1, T> all(const ShGeneric<N, T>& a)
00283 {
00284   ShAttrib<1, SH_TEMP, T> t = a(0);
00285   for (int i = 1; i < N; i++) {
00286     t = t && a(i);
00287   }
00288   return t;
00289 }
00290 
00291 }
00292 
00293 #endif

Generated on Thu Jul 28 17:33:03 2005 for Sh by  doxygen 1.4.3-20050530