- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List

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