- 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                 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