1 #ifndef BOOST_QVM_VEC_HPP_INCLUDED
2 #define BOOST_QVM_VEC_HPP_INCLUDED
4 // Copyright 2008-2022 Emil Dotchevski and Reverge Studios, Inc.
6 // Distributed under the Boost Software License, Version 1.0. (See accompanying
7 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 #include <boost/qvm/detail/vec_assign.hpp>
10 #include <boost/qvm/assert.hpp>
11 #include <boost/qvm/static_assert.hpp>
13 namespace boost { namespace qvm {
15 template <class T,int D>
32 template <class T,int Dim>
34 vec_traits< vec<T,Dim> >
36 typedef vec<T,Dim> this_vector;
37 typedef T scalar_type;
38 static int const dim=Dim;
42 BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL
44 read_element( this_vector const & x )
46 BOOST_QVM_STATIC_ASSERT(I>=0);
47 BOOST_QVM_STATIC_ASSERT(I<dim);
53 BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL
55 write_element( this_vector & x )
57 BOOST_QVM_STATIC_ASSERT(I>=0);
58 BOOST_QVM_STATIC_ASSERT(I<dim);
63 BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL
65 read_element_idx( int i, this_vector const & x )
67 BOOST_QVM_ASSERT(i>=0);
68 BOOST_QVM_ASSERT(i<dim);
73 BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL
75 write_element_idx( int i, this_vector & x )
77 BOOST_QVM_ASSERT(i>=0);
78 BOOST_QVM_ASSERT(i<dim);