master
ブランチ master
VulkanExample / dep / include / glm / gtx / iteration.inl
4.1 KB、116行 生 Blame 履歴
1namespace glm
2{
3 /*
4 namespace details {
5 template<typename T, glm::length_t L>
6 struct known_length_iterator;
7 }
8 */
9
10 /// @addtogroup gtx_iteration
11 /// @{
12 template<length_t L,typename T,qualifier Q>
13 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T* begin(vec<L,T,Q>& v) {
14 return &v.x;
15 }
16 template<length_t C,length_t R,typename T,qualifier Q>
17 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T* begin(mat<C,R,T,Q>& m) {
18 return &m[0].x;
19 }
20 template<typename T,qualifier Q>
21 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T* begin(qua<T,Q>& q) {
22 return &q[0];
23 }
24 template<length_t L,typename T,qualifier Q>
25 GLM_FUNC_QUALIFIER GLM_CONSTEXPR const T* begin(const vec<L,T,Q>& v) {
26 return &v.x;
27 }
28 template<length_t C,length_t R,typename T,qualifier Q>
29 GLM_FUNC_QUALIFIER GLM_CONSTEXPR const T* begin(const mat<C,R,T,Q>& m) {
30 return &m[0].x;
31 }
32 template<typename T,qualifier Q>
33 GLM_FUNC_QUALIFIER GLM_CONSTEXPR const T* begin(const qua<T,Q>& q) {
34 return &q[0];
35 }
36
37 template<length_t L,typename T,qualifier Q>
38 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T* end(vec<L,T,Q>& v) {
39 return (&v.x) + L;
40 }
41 template<length_t C,length_t R,typename T,qualifier Q>
42 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T* end(mat<C,R,T,Q>& m) {
43 return (&m[0].x) + C*R;
44 }
45 template<typename T,qualifier Q>
46 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T* end(qua<T,Q>& q) {
47 return (&q[0]) + 4;
48 }
49 template<length_t L,typename T,qualifier Q>
50 GLM_FUNC_QUALIFIER GLM_CONSTEXPR const T* end(const vec<L,T,Q>& v) {
51 return (&v.x) + L;
52 }
53 template<length_t C,length_t R,typename T,qualifier Q>
54 GLM_FUNC_QUALIFIER GLM_CONSTEXPR const T* end(const mat<C,R,T,Q>& m) {
55 return (&m[0].x) + C*R;
56 }
57 template<typename T,qualifier Q>
58 GLM_FUNC_QUALIFIER GLM_CONSTEXPR const T* end(const qua<T,Q>& q) {
59 return (&q[0]) + 4;
60 }
61
62 // Reverse iteration
63 // rbegin,rend
64 template<length_t L,typename T,qualifier Q>
65 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<T*> rbegin(vec<L,T,Q>& v) {
66 return std::reverse_iterator<T*>(end(v));
67 }
68 template<length_t C,length_t R,typename T,qualifier Q>
69 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<T*> rbegin(mat<C,R,T,Q>& m) {
70 return std::reverse_iterator<T*>(end(m));
71 }
72 template<typename T,qualifier Q>
73 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<T*> rbegin(qua<T,Q>& q) {
74 return std::reverse_iterator<T*>(end(q));
75 }
76 template<length_t L,typename T,qualifier Q>
77 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<const T*> rbegin(const vec<L,T,Q>& v) {
78 return std::reverse_iterator<const T*>(end(v));
79 }
80 template<length_t C,length_t R,typename T,qualifier Q>
81 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<const T*> rbegin(const mat<C,R,T,Q>& m) {
82 return std::reverse_iterator<const T*>(end(m));
83 }
84 template<typename T,qualifier Q>
85 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<const T*> rbegin(const qua<T,Q>& q) {
86 return std::reverse_iterator<const T*>(end(q));
87 }
88
89 template<length_t L,typename T,qualifier Q>
90 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<T*> rend(vec<L,T,Q>& v) {
91 return std::reverse_iterator<T*>(begin(v));
92 }
93 template<length_t C,length_t R,typename T,qualifier Q>
94 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<T*> rend(mat<C,R,T,Q>& m) {
95 return std::reverse_iterator<T*>(begin(m));
96 }
97 template<typename T,qualifier Q>
98 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<T*> rend(qua<T,Q>& q) {
99 return std::reverse_iterator<T*>(begin(q));
100 }
101 template<length_t L,typename T,qualifier Q>
102 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<const T*> rend(const vec<L,T,Q>& v) {
103 return std::reverse_iterator<const T*>(begin(v));
104 }
105 template<length_t C,length_t R,typename T,qualifier Q>
106 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<const T*> rend(const mat<C,R,T,Q>& m) {
107 return std::reverse_iterator<const T*>(begin(m));
108 }
109 template<typename T,qualifier Q>
110 GLM_FUNC_QUALIFIER GLM_CONSTEXPR std::reverse_iterator<const T*> rend(const qua<T,Q>& q) {
111 return std::reverse_iterator<const T*>(begin(q));
112 }
113
114
115 /// @}
116}//namespace glm