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                 static GLM_FUNC_DECL size_type value_size();
00059 
00060                 typedef tvec1<T> type;
00061                 typedef tvec1<bool> bool_type;
00062 
00064                 // Data
00065 
00066 #               if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
00067                         value_type x;
00068 #               else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
00069                         union {value_type x, r, s;};
00070 #               endif//GLM_COMPONENT
00071 
00073                 // Accesses
00074 
00075                 GLM_FUNC_DECL value_type & operator[](size_type i);
00076                 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
00077 
00079                 // Implicit basic constructors
00080 
00081                 GLM_FUNC_DECL tvec1();
00082                 GLM_FUNC_DECL tvec1(tvec1<T> const & v);
00083 
00085                 // Explicit basic constructors
00086 
00087                 GLM_FUNC_DECL explicit tvec1(
00088                         ctor);
00089                 GLM_FUNC_DECL explicit tvec1(
00090                         value_type const & s);
00091 
00093                 // Swizzle constructors
00094 
00095                 GLM_FUNC_DECL tvec1(tref1<T> const & r);
00096 
00098                 // Convertion scalar constructors
00099 
00101                 template <typename U> 
00102                 GLM_FUNC_DECL explicit tvec1(U const & s);
00103 
00105                 // Convertion vector constructors
00106 
00108                 template <typename U> 
00109                 GLM_FUNC_DECL explicit tvec1(tvec2<U> const & v);
00111                 template <typename U> 
00112                 GLM_FUNC_DECL explicit tvec1(tvec3<U> const & v);
00114                 template <typename U> 
00115                 GLM_FUNC_DECL explicit tvec1(tvec4<U> const & v);
00116 
00118                 // Unary arithmetic operators
00119 
00120                 GLM_FUNC_DECL tvec1<T> & operator= (tvec1<T> const & v);
00121                 template <typename U> 
00122                 GLM_FUNC_DECL tvec1<T> & operator= (tvec1<U> const & v);
00123 
00124                 template <typename U> 
00125                 GLM_FUNC_DECL tvec1<T> & operator+=(U const & s);
00126                 template <typename U> 
00127                 GLM_FUNC_DECL tvec1<T> & operator+=(tvec1<U> const & v);
00128                 template <typename U> 
00129                 GLM_FUNC_DECL tvec1<T> & operator-=(U const & s);
00130                 template <typename U> 
00131                 GLM_FUNC_DECL tvec1<T> & operator-=(tvec1<U> const & v);
00132                 template <typename U> 
00133                 GLM_FUNC_DECL tvec1<T> & operator*=(U const & s);
00134                 template <typename U> 
00135                 GLM_FUNC_DECL tvec1<T> & operator*=(tvec1<U> const & v);
00136                 template <typename U> 
00137                 GLM_FUNC_DECL tvec1<T> & operator/=(U const & s);
00138                 template <typename U> 
00139                 GLM_FUNC_DECL tvec1<T> & operator/=(tvec1<U> const & v);
00140                 GLM_FUNC_DECL tvec1<T> & operator++();
00141                 GLM_FUNC_DECL tvec1<T> & operator--();
00142 
00144                 // Unary bit operators
00145 
00146                 template <typename U> 
00147                 GLM_FUNC_DECL tvec1<T> & operator%=(U const & s);
00148                 template <typename U> 
00149                 GLM_FUNC_DECL tvec1<T> & operator%=(tvec1<U> const & v);
00150                 template <typename U> 
00151                 GLM_FUNC_DECL tvec1<T> & operator&=(U const & s);
00152                 template <typename U> 
00153                 GLM_FUNC_DECL tvec1<T> & operator&=(tvec1<U> const & v);
00154                 template <typename U> 
00155                 GLM_FUNC_DECL tvec1<T> & operator|=(U const & s);
00156                 template <typename U> 
00157                 GLM_FUNC_DECL tvec1<T> & operator|=(tvec1<U> const & v);
00158                 template <typename U> 
00159                 GLM_FUNC_DECL tvec1<T> & operator^=(U const & s);
00160                 template <typename U> 
00161                 GLM_FUNC_DECL tvec1<T> & operator^=(tvec1<U> const & v);
00162                 template <typename U> 
00163                 GLM_FUNC_DECL tvec1<T> & operator<<=(U const & s);
00164                 template <typename U> 
00165                 GLM_FUNC_DECL tvec1<T> & operator<<=(tvec1<U> const & v);
00166                 template <typename U> 
00167                 GLM_FUNC_DECL tvec1<T> & operator>>=(U const & s);
00168                 template <typename U> 
00169                 GLM_FUNC_DECL tvec1<T> & operator>>=(tvec1<U> const & v);
00170 
00172                 // Swizzle operators
00173 
00174                 GLM_FUNC_DECL value_type swizzle(comp X) const;
00175                 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
00176                 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
00177                 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
00178                 GLM_FUNC_DECL tref1<T> swizzle(comp X);
00179         };
00180 
00181         template <typename T>
00182         struct tref1
00183         {
00184                 GLM_FUNC_DECL tref1(T & x);
00185                 GLM_FUNC_DECL tref1(tref1<T> const & r);
00186                 GLM_FUNC_DECL tref1(tvec1<T> const & v);
00187 
00188                 GLM_FUNC_DECL tref1<T> & operator= (tref1<T> const & r);
00189                 GLM_FUNC_DECL tref1<T> & operator= (tvec1<T> const & v);
00190 
00191                 T& x;
00192         };
00193 
00194         GLM_DETAIL_IS_VECTOR(tvec1);
00195 
00196         typedef detail::tvec1<highp_float>              highp_vec1_t;
00197         typedef detail::tvec1<mediump_float>    mediump_vec1_t;
00198         typedef detail::tvec1<lowp_float>               lowp_vec1_t;
00199         typedef detail::tvec1<highp_int>                highp_ivec1_t;
00200         typedef detail::tvec1<mediump_int>              mediump_ivec1_t;
00201         typedef detail::tvec1<lowp_int>                 lowp_ivec1_t;
00202         typedef detail::tvec1<highp_uint>               highp_uvec1_t;
00203         typedef detail::tvec1<mediump_uint>             mediump_uvec1_t;
00204         typedef detail::tvec1<lowp_uint>                lowp_uvec1_t;
00205 
00206 }//namespace detail
00207 }//namespace glm
00208 
00209 #ifndef GLM_EXTERNAL_TEMPLATE
00210 #include "type_vec1.inl"
00211 #endif//GLM_EXTERNAL_TEMPLATE
00212 
00213 #endif//glm_core_type_gentype1