29 #ifndef glm_core_type_gentype4 
   30 #define glm_core_type_gentype4 
   41         template <
typename T> 
struct tref2;
 
   42         template <
typename T> 
struct tref3;
 
   43         template <
typename T> 
struct tref4;
 
   44         template <
typename T> 
struct tvec2;
 
   45         template <
typename T> 
struct tvec3;
 
   53                 typedef std::size_t size_type;
 
   54                 typedef tvec4<T> type;
 
   55                 typedef tvec4<bool> bool_type;
 
   57                 GLM_FUNC_DECL GLM_CONSTEXPR size_type 
length() 
const;
 
   62 #       if(GLM_COMPONENT == GLM_COMPONENT_CXX11) 
   65 #               if(defined(GLM_SWIZZLE)) 
   66                         _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, x, y, z, w)
 
   67                         _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, r, g, b, a)
 
   68                         _GLM_SWIZZLE4_2_MEMBERS(value_type, glm::detail::tvec2<value_type>, s, t, p, q)
 
   69                         _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, x, y, z, w)
 
   70                         _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, r, g, b, a)
 
   71                         _GLM_SWIZZLE4_3_MEMBERS(value_type, glm::detail::tvec3<value_type>, s, t, p, q)
 
   72                         _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, x, y, z, w)
 
   73                         _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, r, g, b, a)
 
   74                         _GLM_SWIZZLE4_4_MEMBERS(value_type, glm::detail::tvec4<value_type>, s, t, p, q)
 
   75 #               endif//(defined(GLM_SWIZZLE)) 
   77                         struct{value_type r, g, b, a;};
 
   78                         struct{value_type s, t, p, q;};
 
   79                         struct{value_type x, y, z, w;};
 
   81 #       elif(GLM_COMPONENT == GLM_COMPONENT_CXX98) 
   82                 union {value_type x, r, s;};
 
   83                 union {value_type y, g, t;};
 
   84                 union {value_type z, b, p;};
 
   85                 union {value_type w, a, q;};
 
   87 #               if(defined(GLM_SWIZZLE)) 
   89                         GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, detail::tvec4, detail::tref2, detail::tref3, detail::tref4)
 
   90                         GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4)
 
   91 #               endif//(defined(GLM_SWIZZLE)) 
   92 #       else //(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW) 
   93                 value_type x, y, z, w;
 
   95 #               if(defined(GLM_SWIZZLE)) 
   97                         GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, detail::tvec4, detail::tref2, detail::tref3, detail::tref4, x, y, z, w)
 
   98                         GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, detail::tvec4, detail::tvec2, detail::tvec3, detail::tvec4, x, y, z, w)
 
   99 #               endif//(defined(GLM_SWIZZLE)) 
  100 #       endif//GLM_COMPONENT 
  105                 GLM_FUNC_DECL value_type & operator[](size_type i);
 
  106                 GLM_FUNC_DECL value_type 
const & operator[](size_type i) 
const;
 
  111                 GLM_FUNC_DECL tvec4();
 
  112                 GLM_FUNC_DECL tvec4(type 
const & v);
 
  117                 GLM_FUNC_DECL 
explicit tvec4(
 
  119                 GLM_FUNC_DECL 
explicit tvec4(
 
  120                         value_type 
const & s);
 
  121                 GLM_FUNC_DECL 
explicit tvec4(
 
  122                         value_type 
const & s0, 
 
  123                         value_type 
const & s1, 
 
  124                         value_type 
const & s2, 
 
  125                         value_type 
const & s3);
 
  131                 template <
typename U> 
 
  132                 GLM_FUNC_DECL 
explicit tvec4(
 
  135                 template <
typename A, 
typename B, 
typename C, 
typename D> 
 
  136                 GLM_FUNC_DECL 
explicit tvec4(
 
  146                 template <
typename A, 
typename B, 
typename C> 
 
  147                 GLM_FUNC_DECL 
explicit tvec4(tvec2<A> 
const & v, B 
const & s1, C 
const & s2);
 
  149                 template <
typename A, 
typename B, 
typename C> 
 
  150                 GLM_FUNC_DECL 
explicit tvec4(A 
const & s1, tvec2<B> 
const & v, C 
const & s2);
 
  152                 template <
typename A, 
typename B, 
typename C> 
 
  153                 GLM_FUNC_DECL 
explicit tvec4(A 
const & s1, B 
const & s2, tvec2<C> 
const & v);
 
  155                 template <
typename A, 
typename B> 
 
  156                 GLM_FUNC_DECL 
explicit tvec4(tvec3<A> 
const & v, B 
const & s);
 
  158                 template <
typename A, 
typename B> 
 
  159                 GLM_FUNC_DECL 
explicit tvec4(A 
const & s, tvec3<B> 
const & v);
 
  161                 template <
typename A, 
typename B> 
 
  162                 GLM_FUNC_DECL 
explicit tvec4(tvec2<A> 
const & v1, tvec2<B> 
const & v2);
 
  164                 template <
typename U> 
 
  165                 GLM_FUNC_DECL 
explicit tvec4(tvec4<U> 
const & v);
 
  167                 template <
int E0, 
int E1, 
int E2, 
int E3>
 
  168                 GLM_FUNC_DECL tvec4(glm::detail::swizzle<4, T, tvec4<T>, E0, E1, E2, E3> 
const & that)
 
  173                 template <
int E0, 
int E1, 
int F0, 
int F1>
 
  174                 GLM_FUNC_DECL tvec4(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> 
const & v, glm::detail::swizzle<2, T, tvec2<T>, F0, F1, -1, -2> 
const & u)
 
  176                         *
this = tvec4<T>(v(), u());
 
  179                 template <
int E0, 
int E1>
 
  180                 GLM_FUNC_DECL tvec4(T 
const & x, T 
const & y, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> 
const & v)
 
  182                         *
this = tvec4<T>(x, y, v());
 
  185                 template <
int E0, 
int E1>
 
  186                 GLM_FUNC_DECL tvec4(T 
const & x, glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> 
const & v, T 
const & w)
 
  188                         *
this = tvec4<T>(x, v(), w);
 
  191                 template <
int E0, 
int E1>
 
  192                 GLM_FUNC_DECL tvec4(glm::detail::swizzle<2, T, tvec2<T>, E0, E1, -1, -2> 
const & v, T 
const & z, T 
const & w)
 
  194                         *
this = tvec4<T>(v(), z, w);
 
  197                 template <
int E0, 
int E1, 
int E2>
 
  198                 GLM_FUNC_DECL tvec4(glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> 
const & v, T 
const & w)
 
  200                         *
this = tvec4<T>(v(), w);
 
  203                 template <
int E0, 
int E1, 
int E2>
 
  204                 GLM_FUNC_DECL tvec4(T 
const & x, glm::detail::swizzle<3, T, tvec3<T>, E0, E1, E2, -1> 
const & v)
 
  206                         *
this = tvec4<T>(x, v());
 
  212                 GLM_FUNC_DECL tvec4(tref4<T> 
const & r);
 
  215                 template <
typename A, 
typename B, 
typename C> 
 
  216                 GLM_FUNC_DECL 
explicit tvec4(tref2<A> 
const & v, B 
const & s1, C 
const & s2);
 
  218                 template <
typename A, 
typename B, 
typename C> 
 
  219                 GLM_FUNC_DECL 
explicit tvec4(A 
const & s1, tref2<B> 
const & v, C 
const & s2);
 
  221                 template <
typename A, 
typename B, 
typename C> 
 
  222                 GLM_FUNC_DECL 
explicit tvec4(A 
const & s1, B 
const & s2, tref2<C> 
const & v);
 
  224                 template <
typename A, 
typename B> 
 
  225                 GLM_FUNC_DECL 
explicit tvec4(tref3<A> 
const & v, B 
const & s);
 
  227                 template <
typename A, 
typename B> 
 
  228                 GLM_FUNC_DECL 
explicit tvec4(A 
const & s, tref3<B> 
const & v);
 
  230                 template <
typename A, 
typename B> 
 
  231                 GLM_FUNC_DECL 
explicit tvec4(tref2<A> 
const & v1, tref2<B> 
const & v2);
 
  233                 template <
typename A, 
typename B> 
 
  234                 GLM_FUNC_DECL 
explicit tvec4(tvec2<A> 
const & v1, tref2<B> 
const & v2);
 
  236                 template <
typename A, 
typename B> 
 
  237                 GLM_FUNC_DECL 
explicit tvec4(tref2<A> 
const & v1, tvec2<B> 
const & v2);
 
  242                 GLM_FUNC_DECL tvec4<T> & operator= (tvec4<T> 
const & v);
 
  243                 template <
typename U>
 
  244                 GLM_FUNC_DECL tvec4<T> & operator= (tvec4<U> 
const & v);
 
  246                 template <
typename U>
 
  247                 GLM_FUNC_DECL tvec4<T> & operator+=(U 
const & s);
 
  248                 template <
typename U>
 
  249                 GLM_FUNC_DECL tvec4<T> & operator+=(tvec4<U> 
const & v);
 
  250                 template <
typename U>
 
  251                 GLM_FUNC_DECL tvec4<T> & operator-=(U 
const & s);
 
  252                 template <
typename U>
 
  253                 GLM_FUNC_DECL tvec4<T> & operator-=(tvec4<U> 
const & v);
 
  254                 template <
typename U>
 
  255                 GLM_FUNC_DECL tvec4<T> & operator*=(U 
const & s);
 
  256                 template <
typename U>
 
  257                 GLM_FUNC_DECL tvec4<T> & operator*=(tvec4<U> 
const & v);
 
  258                 template <
typename U>
 
  259                 GLM_FUNC_DECL tvec4<T> & operator/=(U 
const & s);
 
  260                 template <
typename U>
 
  261                 GLM_FUNC_DECL tvec4<T> & operator/=(tvec4<U> 
const & v);
 
  262                 GLM_FUNC_DECL tvec4<T> & operator++();
 
  263                 GLM_FUNC_DECL tvec4<T> & operator--();
 
  268                 template <
typename U>
 
  269                 GLM_FUNC_DECL tvec4<T> & operator%= (U 
const & s);
 
  270                 template <
typename U>
 
  271                 GLM_FUNC_DECL tvec4<T> & operator%= (tvec4<U> 
const & v);
 
  272                 template <
typename U>
 
  273                 GLM_FUNC_DECL tvec4<T> & operator&= (U 
const & s);
 
  274                 template <
typename U>
 
  275                 GLM_FUNC_DECL tvec4<T> & operator&= (tvec4<U> 
const & v);
 
  276                 template <
typename U>
 
  277                 GLM_FUNC_DECL tvec4<T> & operator|= (U 
const & s);
 
  278                 template <
typename U>
 
  279                 GLM_FUNC_DECL tvec4<T> & operator|= (tvec4<U> 
const & v);
 
  280                 template <
typename U>
 
  281                 GLM_FUNC_DECL tvec4<T> & operator^= (U 
const & s);
 
  282                 template <
typename U>
 
  283                 GLM_FUNC_DECL tvec4<T> & operator^= (tvec4<U> 
const & v);
 
  284                 template <
typename U>
 
  285                 GLM_FUNC_DECL tvec4<T> & operator<<=(U 
const & s);
 
  286                 template <
typename U>
 
  287                 GLM_FUNC_DECL tvec4<T> & operator<<=(tvec4<U> 
const & v);
 
  288                 template <
typename U>
 
  289                 GLM_FUNC_DECL tvec4<T> & operator>>=(U 
const & s);
 
  290                 template <
typename U>
 
  291                 GLM_FUNC_DECL tvec4<T> & operator>>=(tvec4<U> 
const & v);
 
  296                 GLM_FUNC_DECL value_type swizzle(comp X) 
const;
 
  297                 GLM_FUNC_DECL tvec2<T> swizzle(comp X, comp Y) 
const;
 
  298                 GLM_FUNC_DECL tvec3<T> swizzle(comp X, comp Y, comp Z) 
const;
 
  299                 GLM_FUNC_DECL tvec4<T> swizzle(comp X, comp Y, comp Z, comp W) 
const;
 
  300                 GLM_FUNC_DECL tref2<T> swizzle(comp X, comp Y);
 
  301                 GLM_FUNC_DECL tref3<T> swizzle(comp X, comp Y, comp Z);
 
  302                 GLM_FUNC_DECL tref4<T> swizzle(comp X, comp Y, comp Z, comp W);
 
  305         template <
typename T>
 
  308                 GLM_FUNC_DECL tref4(T & x, T & y, T & z, T & w);
 
  309                 GLM_FUNC_DECL tref4(tref4<T> 
const & r);
 
  310                 GLM_FUNC_DECL 
explicit tref4(tvec4<T> 
const & v);
 
  312                 GLM_FUNC_DECL tref4<T> & operator= (tref4<T> 
const & r);
 
  313                 GLM_FUNC_DECL tref4<T> & operator= (tvec4<T> 
const & v);
 
  315                 GLM_FUNC_DECL tvec4<T> operator() ();
 
  323         GLM_DETAIL_IS_VECTOR(tvec4);
 
  395 #ifndef GLM_EXTERNAL_TEMPLATE 
  396 #include "type_vec4.inl" 
  397 #endif//GLM_EXTERNAL_TEMPLATE 
  399 #endif//glm_core_type_gentype4