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
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
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
00079
00080 GLM_FUNC_DECL tvec1();
00081 GLM_FUNC_DECL tvec1(tvec1<T> const & v);
00082
00084
00085
00086 GLM_FUNC_DECL explicit tvec1(
00087 ctor);
00088 GLM_FUNC_DECL explicit tvec1(
00089 value_type const & s);
00090
00092
00093
00094 GLM_FUNC_DECL tvec1(tref1<T> const & r);
00095
00097
00098
00100 template <typename U>
00101 GLM_FUNC_DECL explicit tvec1(U const & s);
00102
00104
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
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
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
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 }
00206 }
00207
00208 #ifndef GLM_EXTERNAL_TEMPLATE
00209 #include "type_vec1.inl"
00210 #endif//GLM_EXTERNAL_TEMPLATE
00211
00212 #endif//glm_core_type_gentype1