00001
00002
00004
00005
00006
00007
00009
00010 #ifndef glm_core_type_gentype1
00011 #define glm_core_type_gentype1
00012
00013 #include "type_vec.hpp"
00014 #include "type_float.hpp"
00015 #include "type_int.hpp"
00016 #include "type_size.hpp"
00017 #include "_swizzle.hpp"
00018
00019 namespace glm{
00020 namespace detail
00021 {
00022 template <typename T> struct tref1;
00023 template <typename T> struct tref2;
00024 template <typename T> struct tref3;
00025 template <typename T> struct tref4;
00026 template <typename T> struct tvec1;
00027 template <typename T> struct tvec2;
00028 template <typename T> struct tvec3;
00029 template <typename T> struct tvec4;
00030
00031 template <typename T>
00032 struct tvec1
00033 {
00034 enum ctor{null};
00035
00036 typedef T value_type;
00037 typedef std::size_t size_type;
00038 GLM_FUNC_DECL size_type length() const;
00039 static GLM_FUNC_DECL size_type value_size();
00040
00041 typedef tvec1<T> type;
00042 typedef tvec1<bool> bool_type;
00043
00045
00046
00047 # if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
00048 value_type x;
00049 # else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
00050 union {value_type x, r, s;};
00051 # endif//GLM_COMPONENT
00052
00054
00055
00056 GLM_FUNC_DECL value_type & operator[](size_type i);
00057 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
00058
00060
00061
00062 GLM_FUNC_DECL tvec1();
00063 GLM_FUNC_DECL tvec1(tvec1<T> const & v);
00064
00066
00067
00068 GLM_FUNC_DECL explicit tvec1(
00069 ctor);
00070 GLM_FUNC_DECL explicit tvec1(
00071 value_type const & s);
00072
00074
00075
00076 GLM_FUNC_DECL tvec1(tref1<T> const & r);
00077
00079
00080
00082 template <typename U>
00083 GLM_FUNC_DECL explicit tvec1(U const & s);
00084
00086
00087
00089 template <typename U>
00090 GLM_FUNC_DECL explicit tvec1(tvec2<U> const & v);
00092 template <typename U>
00093 GLM_FUNC_DECL explicit tvec1(tvec3<U> const & v);
00095 template <typename U>
00096 GLM_FUNC_DECL explicit tvec1(tvec4<U> const & v);
00097
00099
00100
00101 GLM_FUNC_DECL tvec1<T> & operator= (tvec1<T> const & v);
00102
00103 GLM_FUNC_DECL tvec1<T> & operator+=(value_type const & s);
00104 GLM_FUNC_DECL tvec1<T> & operator+=(tvec1<T> const & v);
00105 GLM_FUNC_DECL tvec1<T> & operator-=(value_type const & s);
00106 GLM_FUNC_DECL tvec1<T> & operator-=(tvec1<T> const & v);
00107 GLM_FUNC_DECL tvec1<T> & operator*=(value_type const & s);
00108 GLM_FUNC_DECL tvec1<T> & operator*=(tvec1<T> const & v);
00109 GLM_FUNC_DECL tvec1<T> & operator/=(value_type const & s);
00110 GLM_FUNC_DECL tvec1<T> & operator/=(tvec1<T> const & v);
00111 GLM_FUNC_DECL tvec1<T> & operator++();
00112 GLM_FUNC_DECL tvec1<T> & operator--();
00113
00115
00116
00117 GLM_FUNC_DECL tvec1<T> & operator%=(value_type const & s);
00118 GLM_FUNC_DECL tvec1<T> & operator%=(tvec1<T> const & v);
00119 GLM_FUNC_DECL tvec1<T> & operator&=(value_type const & s);
00120 GLM_FUNC_DECL tvec1<T> & operator&=(tvec1<T> const & v);
00121 GLM_FUNC_DECL tvec1<T> & operator|=(value_type const & s);
00122 GLM_FUNC_DECL tvec1<T> & operator|=(tvec1<T> const & v);
00123 GLM_FUNC_DECL tvec1<T> & operator^=(value_type const & s);
00124 GLM_FUNC_DECL tvec1<T> & operator^=(tvec1<T> const & v);
00125 GLM_FUNC_DECL tvec1<T> & operator<<=(value_type const & s);
00126 GLM_FUNC_DECL tvec1<T> & operator<<=(tvec1<T> const & v);
00127 GLM_FUNC_DECL tvec1<T> & operator>>=(value_type const & s);
00128 GLM_FUNC_DECL tvec1<T> & operator>>=(tvec1<T> const & v);
00129
00131
00132
00133 GLM_FUNC_DECL value_type swizzle(comp X) const;
00134 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
00135 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
00136 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
00137 GLM_FUNC_DECL tref1<T> swizzle(comp X);
00138 };
00139
00140 template <typename T>
00141 struct tref1
00142 {
00143 GLM_FUNC_DECL tref1(T & x);
00144 GLM_FUNC_DECL tref1(tref1<T> const & r);
00145 GLM_FUNC_DECL tref1(tvec1<T> const & v);
00146
00147 GLM_FUNC_DECL tref1<T> & operator= (tref1<T> const & r);
00148 GLM_FUNC_DECL tref1<T> & operator= (tvec1<T> const & v);
00149
00150 T& x;
00151 };
00152
00153 GLM_DETAIL_IS_VECTOR(tvec1);
00154
00155 typedef detail::tvec1<core::type::precision::highp_float> highp_vec1_t;
00156 typedef detail::tvec1<core::type::precision::mediump_float> mediump_vec1_t;
00157 typedef detail::tvec1<core::type::precision::lowp_float> lowp_vec1_t;
00158 typedef detail::tvec1<core::type::precision::highp_int> highp_ivec1_t;
00159 typedef detail::tvec1<core::type::precision::mediump_int> mediump_ivec1_t;
00160 typedef detail::tvec1<core::type::precision::lowp_int> lowp_ivec1_t;
00161 typedef detail::tvec1<core::type::precision::highp_uint> highp_uvec1_t;
00162 typedef detail::tvec1<core::type::precision::mediump_uint> mediump_uvec1_t;
00163 typedef detail::tvec1<core::type::precision::lowp_uint> lowp_uvec1_t;
00164
00165 }
00166 }
00167
00168 #ifndef GLM_EXTERNAL_TEMPLATE
00169 #include "type_vec1.inl"
00170 #endif//GLM_EXTERNAL_TEMPLATE
00171
00172 #endif//glm_core_type_gentype1