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 {
00021 namespace test
00022 {
00023 void main_vec1();
00024 }
00025
00026 namespace detail
00027 {
00028 template <typename T> struct tref1;
00029 template <typename T> struct tref2;
00030 template <typename T> struct tref3;
00031 template <typename T> struct tref4;
00032 template <typename T> struct tvec1;
00033 template <typename T> struct tvec2;
00034 template <typename T> struct tvec3;
00035 template <typename T> struct tvec4;
00036
00037 template <typename T>
00038 struct tvec1
00039 {
00040 enum ctor{null};
00041
00042 typedef T value_type;
00043 typedef std::size_t size_type;
00044 GLM_FUNC_DECL size_type length() const;
00045 static GLM_FUNC_DECL size_type value_size();
00046
00047 typedef tvec1<T> type;
00048 typedef tvec1<bool> bool_type;
00049
00051
00052
00053 # if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
00054 value_type x;
00055 # else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
00056 union {value_type x, r, s;};
00057 # endif//GLM_COMPONENT
00058
00060
00061
00062 GLM_FUNC_DECL value_type & operator[](size_type i);
00063 GLM_FUNC_DECL value_type const & operator[](size_type i) const;
00064
00066
00067
00068 GLM_FUNC_DECL tvec1();
00069 GLM_FUNC_DECL tvec1(tvec1<T> const & v);
00070
00072
00073
00074 GLM_FUNC_DECL explicit tvec1(
00075 ctor);
00076 GLM_FUNC_DECL explicit tvec1(
00077 value_type const & s);
00078
00080
00081
00082 GLM_FUNC_DECL tvec1(tref1<T> const & r);
00083
00085
00086
00088 template <typename U>
00089 GLM_FUNC_DECL explicit tvec1(U const & s);
00090
00092
00093
00095 template <typename U>
00096 GLM_FUNC_DECL explicit tvec1(tvec2<U> const & v);
00098 template <typename U>
00099 GLM_FUNC_DECL explicit tvec1(tvec3<U> const & v);
00101 template <typename U>
00102 GLM_FUNC_DECL explicit tvec1(tvec4<U> const & v);
00103
00105
00106
00107 GLM_FUNC_DECL tvec1<T> & operator= (tvec1<T> const & v);
00108
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-=(value_type const & s);
00112 GLM_FUNC_DECL tvec1<T> & operator-=(tvec1<T> const & v);
00113 GLM_FUNC_DECL tvec1<T> & operator*=(value_type const & s);
00114 GLM_FUNC_DECL tvec1<T> & operator*=(tvec1<T> const & v);
00115 GLM_FUNC_DECL tvec1<T> & operator/=(value_type const & s);
00116 GLM_FUNC_DECL tvec1<T> & operator/=(tvec1<T> const & v);
00117 GLM_FUNC_DECL tvec1<T> & operator++();
00118 GLM_FUNC_DECL tvec1<T> & operator--();
00119
00121
00122
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 GLM_FUNC_DECL tvec1<T> & operator^=(value_type const & s);
00130 GLM_FUNC_DECL tvec1<T> & operator^=(tvec1<T> const & v);
00131 GLM_FUNC_DECL tvec1<T> & operator<<=(value_type const & s);
00132 GLM_FUNC_DECL tvec1<T> & operator<<=(tvec1<T> const & v);
00133 GLM_FUNC_DECL tvec1<T> & operator>>=(value_type const & s);
00134 GLM_FUNC_DECL tvec1<T> & operator>>=(tvec1<T> const & v);
00135
00137
00138
00139 GLM_FUNC_DECL value_type swizzle(comp X) const;
00140 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) const;
00141 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) const;
00142 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) const;
00143 GLM_FUNC_DECL tref1<T> swizzle(comp X);
00144 };
00145
00146 template <typename T>
00147 struct tref1
00148 {
00149 GLM_FUNC_DECL tref1(T & x);
00150 GLM_FUNC_DECL tref1(tref1<T> const & r);
00151 GLM_FUNC_DECL tref1(tvec1<T> const & v);
00152
00153 GLM_FUNC_DECL tref1<T> & operator= (tref1<T> const & r);
00154 GLM_FUNC_DECL tref1<T> & operator= (tvec1<T> const & v);
00155
00156 T& x;
00157 };
00158
00159 GLM_DETAIL_IS_VECTOR(tvec1);
00160
00161 typedef detail::tvec1<core::type::precision::highp_float> highp_vec1_t;
00162 typedef detail::tvec1<core::type::precision::mediump_float> mediump_vec1_t;
00163 typedef detail::tvec1<core::type::precision::lowp_float> lowp_vec1_t;
00164 typedef detail::tvec1<core::type::precision::highp_int> highp_ivec1_t;
00165 typedef detail::tvec1<core::type::precision::mediump_int> mediump_ivec1_t;
00166 typedef detail::tvec1<core::type::precision::lowp_int> lowp_ivec1_t;
00167 typedef detail::tvec1<core::type::precision::highp_uint> highp_uvec1_t;
00168 typedef detail::tvec1<core::type::precision::mediump_uint> mediump_uvec1_t;
00169 typedef detail::tvec1<core::type::precision::lowp_uint> lowp_uvec1_t;
00170
00171 }
00172 }
00173
00174 #ifndef GLM_EXTERNAL_TEMPLATE
00175 #include "type_vec1.inl"
00176 #endif
00177
00178 #endif//glm_core_type_gentype1