31 struct vec_traits { };
36 typedef float float_type;
37 vec_traits(
const vec_type& v) : v(v){}
38 inline std::tuple<float_type,float_type,float_type>
get()
const {
39 return std::make_tuple(v.x, v.y, v.z);
48 typedef double float_type;
49 vec_traits(
const vec_type& v) : v(v){}
50 inline std::tuple<float_type,float_type,float_type>
get()
const {
51 return std::make_tuple(v.x, v.y, v.z);
62 inline std::tuple<float_type,float_type,float_type,float_type>
get()
const {
64 v.getValue(q1,q2,q3,q4);
65 return std::make_tuple(q1, q2, q3, q4);
72 template <
class _Vec,
typename float_type>
73 _Vec
make_vec(
const std::tuple<float_type, float_type, float_type>&& t) {
75 typedef typename traits_type::float_type float_traits_type;
76 return _Vec(float_traits_type(std::get<0>(t)),
77 float_traits_type(std::get<1>(t)),
78 float_traits_type(std::get<2>(t)));
82 template <
class _Vec,
typename float_type>
83 _Vec
make_vec(
const std::tuple<float_type, float_type, float_type, float_type>&& t) {
85 typedef typename traits_type::float_type float_traits_type;
86 return _Vec(float_traits_type(std::get<0>(t)),
87 float_traits_type(std::get<1>(t)),
88 float_traits_type(std::get<2>(t)),
89 float_traits_type(std::get<3>(t)));
92 template <
class _Vec1,
class _Vec2>
96 typedef typename traits_type::float_type float_type;
99 return make_vec<_Vec1, float_type>(std::move(tuple));