0.9.6
_vectorize.hpp
Go to the documentation of this file.
1 
29 #pragma once
30 
31 #include "type_vec1.hpp"
32 #include "type_vec2.hpp"
33 #include "type_vec3.hpp"
34 #include "type_vec4.hpp"
35 
36 namespace glm{
37 namespace detail
38 {
39  template <typename R, typename T, precision P, template <typename, precision> class vecType>
40  struct functor1{};
41 
42  template <typename R, typename T, precision P>
43  struct functor1<R, T, P, tvec1>
44  {
45  GLM_FUNC_QUALIFIER static tvec1<R, P> call(R (*Func) (T x), tvec1<T, P> const & v)
46  {
47  return tvec1<R, P>(Func(v.x));
48  }
49  };
50 
51  template <typename R, typename T, precision P>
52  struct functor1<R, T, P, tvec2>
53  {
54  GLM_FUNC_QUALIFIER static tvec2<R, P> call(R (*Func) (T x), tvec2<T, P> const & v)
55  {
56  return tvec2<R, P>(Func(v.x), Func(v.y));
57  }
58  };
59 
60  template <typename R, typename T, precision P>
61  struct functor1<R, T, P, tvec3>
62  {
63  GLM_FUNC_QUALIFIER static tvec3<R, P> call(R (*Func) (T x), tvec3<T, P> const & v)
64  {
65  return tvec3<R, P>(Func(v.x), Func(v.y), Func(v.z));
66  }
67  };
68 
69  template <typename R, typename T, precision P>
70  struct functor1<R, T, P, tvec4>
71  {
72  GLM_FUNC_QUALIFIER static tvec4<R, P> call(R (*Func) (T x), tvec4<T, P> const & v)
73  {
74  return tvec4<R, P>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));
75  }
76  };
77 
78  template <typename T, precision P, template <typename, precision> class vecType>
79  struct functor2{};
80 
81  template <typename T, precision P>
82  struct functor2<T, P, tvec1>
83  {
84  GLM_FUNC_QUALIFIER static tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> const & a, tvec1<T, P> const & b)
85  {
86  return tvec1<T, P>(Func(a.x, b.x));
87  }
88  };
89 
90  template <typename T, precision P>
91  struct functor2<T, P, tvec2>
92  {
93  GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, tvec2<T, P> const & b)
94  {
95  return tvec2<T, P>(Func(a.x, b.x), Func(a.y, b.y));
96  }
97  };
98 
99  template <typename T, precision P>
100  struct functor2<T, P, tvec3>
101  {
102  GLM_FUNC_QUALIFIER static tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> const & a, tvec3<T, P> const & b)
103  {
104  return tvec3<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));
105  }
106  };
107 
108  template <typename T, precision P>
109  struct functor2<T, P, tvec4>
110  {
111  GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, tvec4<T, P> const & b)
112  {
113  return tvec4<T, P>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));
114  }
115  };
116 
117  template <typename T, precision P, template <typename, precision> class vecType>
118  struct functor2_vec_sca{};
119 
120  template <typename T, precision P>
121  struct functor2_vec_sca<T, P, tvec1>
122  {
123  GLM_FUNC_QUALIFIER static tvec1<T, P> call(T (*Func) (T x, T y), tvec1<T, P> const & a, T b)
124  {
125  return tvec1<T, P>(Func(a.x, b));
126  }
127  };
128 
129  template <typename T, precision P>
130  struct functor2_vec_sca<T, P, tvec2>
131  {
132  GLM_FUNC_QUALIFIER static tvec2<T, P> call(T (*Func) (T x, T y), tvec2<T, P> const & a, T b)
133  {
134  return tvec2<T, P>(Func(a.x, b), Func(a.y, b));
135  }
136  };
137 
138  template <typename T, precision P>
139  struct functor2_vec_sca<T, P, tvec3>
140  {
141  GLM_FUNC_QUALIFIER static tvec3<T, P> call(T (*Func) (T x, T y), tvec3<T, P> const & a, T b)
142  {
143  return tvec3<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b));
144  }
145  };
146 
147  template <typename T, precision P>
148  struct functor2_vec_sca<T, P, tvec4>
149  {
150  GLM_FUNC_QUALIFIER static tvec4<T, P> call(T (*Func) (T x, T y), tvec4<T, P> const & a, T b)
151  {
152  return tvec4<T, P>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));
153  }
154  };
155 }//namespace detail
156 }//namespace glm
OpenGL Mathematics (glm.g-truc.net)
Definition: _noise.hpp:31
OpenGL Mathematics (glm.g-truc.net)
OpenGL Mathematics (glm.g-truc.net)
OpenGL Mathematics (glm.g-truc.net)