_vectorize.hpp
Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 #define VECTORIZE2_VEC(func) \
00030     template <typename T> \
00031     GLM_FUNC_QUALIFIER detail::tvec2<T> func( \
00032                 detail::tvec2<T> const & v) \
00033     { \
00034         return detail::tvec2<T>( \
00035             func(v.x), \
00036             func(v.y)); \
00037     }
00038 
00039 #define VECTORIZE3_VEC(func) \
00040     template <typename T> \
00041     GLM_FUNC_QUALIFIER detail::tvec3<T> func( \
00042                 detail::tvec3<T> const & v) \
00043     { \
00044         return detail::tvec3<T>( \
00045             func(v.x), \
00046             func(v.y), \
00047             func(v.z)); \
00048     }
00049 
00050 #define VECTORIZE4_VEC(func) \
00051     template <typename T> \
00052     GLM_FUNC_QUALIFIER detail::tvec4<T> func( \
00053                 detail::tvec4<T> const & v) \
00054     { \
00055         return detail::tvec4<T>( \
00056             func(v.x), \
00057             func(v.y), \
00058             func(v.z), \
00059             func(v.w)); \
00060     }
00061 
00062 #define VECTORIZE_VEC(func) \
00063         VECTORIZE2_VEC(func) \
00064         VECTORIZE3_VEC(func) \
00065         VECTORIZE4_VEC(func)
00066 
00067 #define VECTORIZE2_VEC_SCA(func) \
00068     template <typename T> \
00069     GLM_FUNC_QUALIFIER detail::tvec2<T> func \
00070         ( \
00071                 detail::tvec2<T> const & x,  \
00072                 typename detail::tvec2<T>::value_type const & y \
00073         ) \
00074     { \
00075         return detail::tvec2<T>( \
00076             func(x.x, y), \
00077             func(x.y, y)); \
00078     }
00079 
00080 #define VECTORIZE3_VEC_SCA(func) \
00081     template <typename T> \
00082     GLM_FUNC_QUALIFIER detail::tvec3<T> func \
00083         ( \
00084                 detail::tvec3<T> const & x,  \
00085                 typename detail::tvec3<T>::value_type const & y \
00086         ) \
00087     { \
00088         return detail::tvec3<T>( \
00089             func(x.x, y), \
00090             func(x.y, y), \
00091             func(x.z, y)); \
00092     }
00093 
00094 #define VECTORIZE4_VEC_SCA(func) \
00095     template <typename T> \
00096     GLM_FUNC_QUALIFIER detail::tvec4<T> func \
00097         ( \
00098                 detail::tvec4<T> const & x,  \
00099                 typename detail::tvec4<T>::value_type const & y \
00100         ) \
00101     { \
00102         return detail::tvec4<T>( \
00103             func(x.x, y), \
00104             func(x.y, y), \
00105             func(x.z, y), \
00106             func(x.w, y)); \
00107     }
00108 
00109 #define VECTORIZE_VEC_SCA(func) \
00110         VECTORIZE2_VEC_SCA(func) \
00111         VECTORIZE3_VEC_SCA(func) \
00112         VECTORIZE4_VEC_SCA(func)
00113 
00114 #define VECTORIZE2_VEC_VEC(func) \
00115     template <typename T> \
00116     GLM_FUNC_QUALIFIER detail::tvec2<T> func \
00117         ( \
00118                 detail::tvec2<T> const & x,  \
00119                 detail::tvec2<T> const & y \
00120         ) \
00121     { \
00122         return detail::tvec2<T>( \
00123             func(x.x, y.x), \
00124             func(x.y, y.y)); \
00125     }
00126 
00127 #define VECTORIZE3_VEC_VEC(func) \
00128     template <typename T> \
00129     GLM_FUNC_QUALIFIER detail::tvec3<T> func \
00130         ( \
00131                 detail::tvec3<T> const & x,  \
00132                 detail::tvec3<T> const & y \
00133         ) \
00134     { \
00135         return detail::tvec3<T>( \
00136             func(x.x, y.x), \
00137             func(x.y, y.y), \
00138             func(x.z, y.z)); \
00139     }
00140 
00141 #define VECTORIZE4_VEC_VEC(func) \
00142     template <typename T> \
00143     GLM_FUNC_QUALIFIER detail::tvec4<T> func \
00144         ( \
00145                 detail::tvec4<T> const & x,  \
00146                 detail::tvec4<T> const & y \
00147         ) \
00148     { \
00149         return detail::tvec4<T>( \
00150             func(x.x, y.x), \
00151             func(x.y, y.y), \
00152             func(x.z, y.z), \
00153             func(x.w, y.w)); \
00154     }
00155 
00156 #define VECTORIZE_VEC_VEC(func) \
00157         VECTORIZE2_VEC_VEC(func) \
00158         VECTORIZE3_VEC_VEC(func) \
00159         VECTORIZE4_VEC_VEC(func)