00001
00002
00004
00005
00006
00007
00009
00010 #ifndef glm_core_func_vector_relational
00011 #define glm_core_func_vector_relational
00012
00013 namespace glm
00014 {
00015 namespace test{
00016 void main_core_func_vector_relational();
00017 }
00018
00019 namespace core{
00020 namespace function{
00023 namespace vector_relational
00024 {
00027 template <typename T, template <typename> class vecType>
00028 inline typename vecType<T>::bool_type lessThan
00029 (
00030 vecType<T> const & x,
00031 vecType<T> const & y
00032 )
00033 {
00034 GLM_STATIC_ASSERT(
00035 detail::type<T>::is_float ||
00036 detail::type<T>::is_int ||
00037 detail::type<T>::is_uint);
00038
00039 typename vecType<bool>::bool_type Result(vecType<bool>::null);
00040 for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
00041 Result[i] = x[i] < y[i];
00042 return Result;
00043 }
00044
00047 template <typename T, template <typename> class vecType>
00048 inline typename vecType<T>::bool_type lessThanEqual
00049 (
00050 vecType<T> const & x,
00051 vecType<T> const & y
00052 )
00053 {
00054 GLM_STATIC_ASSERT(
00055 detail::type<T>::is_float ||
00056 detail::type<T>::is_int ||
00057 detail::type<T>::is_uint);
00058
00059 typename vecType<bool>::bool_type Result(vecType<bool>::null);
00060 for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
00061 Result[i] = x[i] <= y[i];
00062 return Result;
00063 }
00064
00067 template <typename T, template <typename> class vecType>
00068 inline typename vecType<T>::bool_type greaterThan
00069 (
00070 vecType<T> const & x,
00071 vecType<T> const & y
00072 )
00073 {
00074 GLM_STATIC_ASSERT(
00075 detail::type<T>::is_float ||
00076 detail::type<T>::is_int ||
00077 detail::type<T>::is_uint);
00078
00079 typename vecType<bool>::bool_type Result(vecType<bool>::null);
00080 for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
00081 Result[i] = x[i] > y[i];
00082 return Result;
00083 }
00084
00087 template <typename T, template <typename> class vecType>
00088 inline typename vecType<T>::bool_type greaterThanEqual
00089 (
00090 vecType<T> const & x,
00091 vecType<T> const & y
00092 )
00093 {
00094 GLM_STATIC_ASSERT(
00095 detail::type<T>::is_float ||
00096 detail::type<T>::is_int ||
00097 detail::type<T>::is_uint);
00098
00099 typename vecType<bool>::bool_type Result(vecType<bool>::null);
00100 for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
00101 Result[i] = x[i] >= y[i];
00102 return Result;
00103 }
00104
00107 template <typename T, template <typename> class vecType>
00108 inline typename vecType<T>::bool_type equal
00109 (
00110 vecType<T> const & x,
00111 vecType<T> const & y
00112 )
00113 {
00114 GLM_STATIC_ASSERT(
00115 detail::type<T>::is_float ||
00116 detail::type<T>::is_int ||
00117 detail::type<T>::is_uint ||
00118 detail::type<T>::is_bool);
00119
00120 typename vecType<bool>::bool_type Result(vecType<bool>::null);
00121 for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
00122 Result[i] = x[i] == y[i];
00123 return Result;
00124 }
00125
00128 template <typename T, template <typename> class vecType>
00129 inline typename vecType<T>::bool_type notEqual
00130 (
00131 vecType<T> const & x,
00132 vecType<T> const & y
00133 )
00134 {
00135 GLM_STATIC_ASSERT(
00136 detail::type<T>::is_float ||
00137 detail::type<T>::is_int ||
00138 detail::type<T>::is_uint ||
00139 detail::type<T>::is_bool);
00140
00141 typename vecType<bool>::bool_type Result(vecType<bool>::null);
00142 for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
00143 Result[i] = x[i] != y[i];
00144 return Result;
00145 }
00146
00149 template <template <typename> class vecType>
00150 inline bool any(vecType<bool> const & v)
00151 {
00152 bool Result = false;
00153 for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
00154 Result = Result || v[i];
00155 return Result;
00156 }
00157
00160 template <template <typename> class vecType>
00161 inline bool all(vecType<bool> const & v)
00162 {
00163 bool Result = true;
00164 for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
00165 Result = Result && v[i];
00166 return Result;
00167 }
00168
00171 template <template <typename> class vecType>
00172 inline vecType<bool> not_(vecType<bool> const & v)
00173 {
00174 typename vecType<bool>::bool_type Result(vecType<bool>::null);
00175 for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
00176 Result[i] = !v[i];
00177 return Result;
00178 }
00179
00180 }
00181 }
00182 }
00183
00184 using namespace core::function::vector_relational;
00185 }
00186
00187 #include "func_vector_relational.inl"
00188
00189 #endif//glm_core_func_vector_relational