type_vec1.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 #ifndef glm_core_type_gentype1
00030 #define glm_core_type_gentype1
00031 
00032 #include "type_vec.hpp"
00033 #include "type_float.hpp"
00034 #include "type_int.hpp"
00035 #include "type_size.hpp"
00036 #include "_swizzle.hpp"
00037 
00038 namespace glm{
00039 namespace detail
00040 {
00041         template <typename T> struct tref1;
00042         template <typename T> struct tref2;
00043         template <typename T> struct tref3;
00044         template <typename T> struct tref4;
00045         template <typename T> struct tvec1;
00046         template <typename T> struct tvec2;
00047         template <typename T> struct tvec3;
00048         template <typename T> struct tvec4;
00049 
00050         template <typename T>
00051         struct tvec1
00052         {
00053                 enum ctor{null};
00054 
00055                 typedef T value_type;
00056                 typedef std::size_t size_type;
00057                 GLM_FUNC_DECL size_type length() const;
00058 
00059                 typedef tvec1<T> type;
00060                 typedef tvec1<bool> bool_type;
00061 
00063                 // Data
00064 
00065 #               if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
00066                         value_type x;
00067 #               else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
00068                         union {value_type x, r, s;};
00069 #               endif//GLM_COMPONENT
00070 
00072                 // Accesses
00073 
00074                 GLM_FUNC_DECL value_type & operator[](size_type i);
00075                 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
00076 
00078                 // Implicit basic constructors
00079 
00080                 GLM_FUNC_DECL tvec1();
00081                 GLM_FUNC_DECL tvec1(tvec1<T> const & v);
00082 
00084                 // Explicit basic constructors
00085 
00086                 GLM_FUNC_DECL explicit tvec1(
00087                         ctor);
00088                 GLM_FUNC_DECL explicit tvec1(
00089                         value_type const & s);
00090 
00092                 // Swizzle constructors
00093 
00094                 GLM_FUNC_DECL tvec1(tref1<T> const & r);
00095 
00097                 // Convertion scalar constructors
00098 
00100                 template <typename U> 
00101                 GLM_FUNC_DECL explicit tvec1(U const & s);
00102 
00104                 // Convertion vector constructors
00105 
00107                 template <typename U> 
00108                 GLM_FUNC_DECL explicit tvec1(tvec2<U> const & v);
00110                 template <typename U> 
00111                 GLM_FUNC_DECL explicit tvec1(tvec3<U> const & v);
00113                 template <typename U> 
00114                 GLM_FUNC_DECL explicit tvec1(tvec4<U> const & v);
00115 
00117                 // Unary arithmetic operators
00118 
00119                 GLM_FUNC_DECL tvec1<T> & operator= (tvec1<T> const & v);
00120                 template <typename U> 
00121                 GLM_FUNC_DECL tvec1<T> & operator= (tvec1<U> const & v);
00122 
00123                 template <typename U> 
00124                 GLM_FUNC_DECL tvec1<T> & operator+=(U const & s);
00125                 template <typename U> 
00126                 GLM_FUNC_DECL tvec1<T> & operator+=(tvec1<U> const & v);
00127                 template <typename U> 
00128                 GLM_FUNC_DECL tvec1<T> & operator-=(U const & s);
00129                 template <typename U> 
00130                 GLM_FUNC_DECL tvec1<T> & operator-=(tvec1<U> const & v);
00131                 template <typename U> 
00132                 GLM_FUNC_DECL tvec1<T> & operator*=(U const & s);
00133                 template <typename U> 
00134                 GLM_FUNC_DECL tvec1<T> & operator*=(tvec1<U> const & v);
00135                 template <typename U> 
00136                 GLM_FUNC_DECL tvec1<T> & operator/=(U const & s);
00137                 template <typename U> 
00138                 GLM_FUNC_DECL tvec1<T> & operator/=(tvec1<U> const & v);
00139                 GLM_FUNC_DECL tvec1<T> & operator++();
00140                 GLM_FUNC_DECL tvec1<T> & operator--();
00141 
00143                 // Unary bit operators
00144 
00145                 template <typename U> 
00146                 GLM_FUNC_DECL tvec1<T> & operator%=(U const & s);
00147                 template <typename U> 
00148                 GLM_FUNC_DECL tvec1<T> & operator%=(tvec1<U> const & v);
00149                 template <typename U> 
00150                 GLM_FUNC_DECL tvec1<T> & operator&=(U const & s);
00151                 template <typename U> 
00152                 GLM_FUNC_DECL tvec1<T> & operator&=(tvec1<U> const & v);
00153                 template <typename U> 
00154                 GLM_FUNC_DECL tvec1<T> & operator|=(U const & s);
00155                 template <typename U> 
00156                 GLM_FUNC_DECL tvec1<T> & operator|=(tvec1<U> const & v);
00157                 template <typename U> 
00158                 GLM_FUNC_DECL tvec1<T> & operator^=(U const & s);
00159                 template <typename U> 
00160                 GLM_FUNC_DECL tvec1<T> & operator^=(tvec1<U> const & v);
00161                 template <typename U> 
00162                 GLM_FUNC_DECL tvec1<T> & operator<<=(U const & s);
00163                 template <typename U> 
00164                 GLM_FUNC_DECL tvec1<T> & operator<<=(tvec1<U> const & v);
00165                 template <typename U> 
00166                 GLM_FUNC_DECL tvec1<T> & operator>>=(U const & s);
00167                 template <typename U> 
00168                 GLM_FUNC_DECL tvec1<T> & operator>>=(tvec1<U> const & v);
00169 
00171                 // Swizzle operators
00172 
00173                 GLM_FUNC_DECL value_type swizzle(comp X) const;
00174                 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
00175                 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
00176                 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
00177                 GLM_FUNC_DECL tref1<T> swizzle(comp X);
00178         };
00179 
00180         template <typename T>
00181         struct tref1
00182         {
00183                 GLM_FUNC_DECL tref1(T & x);
00184                 GLM_FUNC_DECL tref1(tref1<T> const & r);
00185                 GLM_FUNC_DECL tref1(tvec1<T> const & v);
00186 
00187                 GLM_FUNC_DECL tref1<T> & operator= (tref1<T> const & r);
00188                 GLM_FUNC_DECL tref1<T> & operator= (tvec1<T> const & v);
00189 
00190                 T& x;
00191         };
00192 
00193         GLM_DETAIL_IS_VECTOR(tvec1);
00194 
00195         typedef detail::tvec1<highp_float>              highp_vec1_t;
00196         typedef detail::tvec1<mediump_float>    mediump_vec1_t;
00197         typedef detail::tvec1<lowp_float>               lowp_vec1_t;
00198         typedef detail::tvec1<highp_int>                highp_ivec1_t;
00199         typedef detail::tvec1<mediump_int>              mediump_ivec1_t;
00200         typedef detail::tvec1<lowp_int>                 lowp_ivec1_t;
00201         typedef detail::tvec1<highp_uint>               highp_uvec1_t;
00202         typedef detail::tvec1<mediump_uint>             mediump_uvec1_t;
00203         typedef detail::tvec1<lowp_uint>                lowp_uvec1_t;
00204 
00205 }//namespace detail
00206 }//namespace glm
00207 
00208 #ifndef GLM_EXTERNAL_TEMPLATE
00209 #include "type_vec1.inl"
00210 #endif//GLM_EXTERNAL_TEMPLATE
00211 
00212 #endif//glm_core_type_gentype1