GLM  0.9.5
type_mat4x2.hpp
1 
29 #ifndef glm_core_type_mat4x2
30 #define glm_core_type_mat4x2
31 
32 #include "../fwd.hpp"
33 #include "type_vec2.hpp"
34 #include "type_vec4.hpp"
35 #include "type_mat.hpp"
36 #include <limits>
37 
38 namespace glm{
39 namespace detail
40 {
41  template <typename T, precision P>
42  struct tmat4x2
43  {
44  enum ctor{_null};
45  typedef T value_type;
46  typedef std::size_t size_type;
47  typedef tvec2<T, P> col_type;
48  typedef tvec4<T, P> row_type;
49  typedef tmat4x2<T, P> type;
50  typedef tmat2x4<T, P> transpose_type;
51 
52  GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
53 
54  private:
55  // Data
56  col_type value[4];
57 
58  public:
59  // Constructors
60  GLM_FUNC_DECL tmat4x2();
61  GLM_FUNC_DECL tmat4x2(tmat4x2<T, P> const & m);
62  template <precision Q>
63  GLM_FUNC_DECL tmat4x2(tmat4x2<T, Q> const & m);
64 
65  GLM_FUNC_DECL explicit tmat4x2(
66  ctor Null);
67  GLM_FUNC_DECL explicit tmat4x2(
68  T const & x);
69  GLM_FUNC_DECL explicit tmat4x2(
70  T const & x0, T const & y0,
71  T const & x1, T const & y1,
72  T const & x2, T const & y2,
73  T const & x3, T const & y3);
74  GLM_FUNC_DECL explicit tmat4x2(
75  col_type const & v0,
76  col_type const & v1,
77  col_type const & v2,
78  col_type const & v3);
79 
80 #if(GLM_HAS_INITIALIZER_LISTS)
81  template <typename U>
82  GLM_FUNC_DECL tmat4x2(std::initializer_list<U> m);
83 
84  GLM_FUNC_DECL tmat4x2(std::initializer_list<tvec2<T, P> > m);
85 #endif//GLM_HAS_INITIALIZER_LISTS
86 
88  // Conversions
89  template <typename U>
90  GLM_FUNC_DECL explicit tmat4x2(
91  U const & x);
92 
93  template<
94  typename X1, typename Y1,
95  typename X2, typename Y2,
96  typename X3, typename Y3,
97  typename X4, typename Y4>
98  GLM_FUNC_DECL explicit tmat4x2(
99  X1 const & x1, Y1 const & y1,
100  X2 const & x2, Y2 const & y2,
101  X3 const & x3, Y3 const & y3,
102  X4 const & x4, Y4 const & y4);
103 
104  template <typename V1, typename V2, typename V3, typename V4>
105  GLM_FUNC_DECL explicit tmat4x2(
106  tvec2<V1, P> const & v1,
107  tvec2<V2, P> const & v2,
108  tvec2<V3, P> const & v3,
109  tvec2<V4, P> const & v4);
110 
111  // Matrix conversions
112  template <typename U, precision Q>
113  GLM_FUNC_DECL explicit tmat4x2(tmat4x2<U, Q> const & m);
114 
115  GLM_FUNC_DECL explicit tmat4x2(tmat2x2<T, P> const & x);
116  GLM_FUNC_DECL explicit tmat4x2(tmat3x3<T, P> const & x);
117  GLM_FUNC_DECL explicit tmat4x2(tmat4x4<T, P> const & x);
118  GLM_FUNC_DECL explicit tmat4x2(tmat2x3<T, P> const & x);
119  GLM_FUNC_DECL explicit tmat4x2(tmat3x2<T, P> const & x);
120  GLM_FUNC_DECL explicit tmat4x2(tmat2x4<T, P> const & x);
121  GLM_FUNC_DECL explicit tmat4x2(tmat4x3<T, P> const & x);
122  GLM_FUNC_DECL explicit tmat4x2(tmat3x4<T, P> const & x);
123 
124  // Accesses
125  GLM_FUNC_DECL col_type & operator[](length_t i);
126  GLM_FUNC_DECL col_type const & operator[](length_t i) const;
127 
128  // Unary updatable operators
129  GLM_FUNC_DECL tmat4x2<T, P>& operator= (tmat4x2<T, P> const & m);
130  template <typename U>
131  GLM_FUNC_DECL tmat4x2<T, P>& operator= (tmat4x2<U, P> const & m);
132  template <typename U>
133  GLM_FUNC_DECL tmat4x2<T, P>& operator+= (U s);
134  template <typename U>
135  GLM_FUNC_DECL tmat4x2<T, P>& operator+= (tmat4x2<U, P> const & m);
136  template <typename U>
137  GLM_FUNC_DECL tmat4x2<T, P>& operator-= (U s);
138  template <typename U>
139  GLM_FUNC_DECL tmat4x2<T, P>& operator-= (tmat4x2<U, P> const & m);
140  template <typename U>
141  GLM_FUNC_DECL tmat4x2<T, P>& operator*= (U s);
142  template <typename U>
143  GLM_FUNC_DECL tmat4x2<T, P>& operator/= (U s);
144 
146  // Increment and decrement operators
147 
148  GLM_FUNC_DECL tmat4x2<T, P> & operator++ ();
149  GLM_FUNC_DECL tmat4x2<T, P> & operator-- ();
150  GLM_FUNC_DECL tmat4x2<T, P> operator++(int);
151  GLM_FUNC_DECL tmat4x2<T, P> operator--(int);
152  };
153 
154  // Binary operators
155  template <typename T, precision P>
156  GLM_FUNC_DECL tmat4x2<T, P> operator+ (
157  tmat4x2<T, P> const & m,
158  T const & s);
159 
160  template <typename T, precision P>
161  GLM_FUNC_DECL tmat4x2<T, P> operator+ (
162  tmat4x2<T, P> const & m1,
163  tmat4x2<T, P> const & m2);
164 
165  template <typename T, precision P>
166  GLM_FUNC_DECL tmat4x2<T, P> operator- (
167  tmat4x2<T, P> const & m,
168  T const & s);
169 
170  template <typename T, precision P>
171  GLM_FUNC_DECL tmat4x2<T, P> operator- (
172  tmat4x2<T, P> const & m1,
173  tmat4x2<T, P> const & m2);
174 
175  template <typename T, precision P>
176  GLM_FUNC_DECL tmat4x2<T, P> operator* (
177  tmat4x2<T, P> const & m,
178  T const & s);
179 
180  template <typename T, precision P>
181  GLM_FUNC_DECL tmat4x2<T, P> operator* (
182  T const & s,
183  tmat4x2<T, P> const & m);
184 
185  template <typename T, precision P>
186  GLM_FUNC_DECL typename tmat4x2<T, P>::col_type operator* (
187  tmat4x2<T, P> const & m,
188  typename tmat4x2<T, P>::row_type const & v);
189 
190  template <typename T, precision P>
191  GLM_FUNC_DECL typename tmat4x2<T, P>::row_type operator* (
192  typename tmat4x2<T, P>::col_type const & v,
193  tmat4x2<T, P> const & m);
194 
195  template <typename T, precision P>
196  GLM_FUNC_DECL tmat3x2<T, P> operator* (
197  tmat4x2<T, P> const & m1,
198  tmat3x4<T, P> const & m2);
199 
200  template <typename T, precision P>
201  GLM_FUNC_DECL tmat4x2<T, P> operator* (
202  tmat4x2<T, P> const & m1,
203  tmat4x4<T, P> const & m2);
204 
205  template <typename T, precision P>
206  GLM_FUNC_DECL tmat2x3<T, P> operator* (
207  tmat4x3<T, P> const & m1,
208  tmat2x4<T, P> const & m2);
209 
210  template <typename T, precision P>
211  GLM_FUNC_DECL tmat4x2<T, P> operator/ (
212  tmat4x2<T, P> const & m,
213  T const & s);
214 
215  template <typename T, precision P>
216  GLM_FUNC_DECL tmat4x2<T, P> operator/ (
217  T const & s,
218  tmat4x2<T, P> const & m);
219 
220  // Unary constant operators
221  template <typename T, precision P>
222  GLM_FUNC_DECL tmat4x2<T, P> const operator-(
223  tmat4x2<T, P> const & m);
224 
225 }//namespace detail
226 }//namespace glm
227 
228 #ifndef GLM_EXTERNAL_TEMPLATE
229 #include "type_mat4x2.inl"
230 #endif
231 
232 #endif //glm_core_type_mat4x2
GLM_FUNC_DECL genType::value_type length(genType const &x)
Returns the length of x, i.e., sqrt(x * x).