#ifndef BOOST_QVM_TEST_QVM_VECTOR_HPP_INCLUDED #define BOOST_QVM_TEST_QVM_VECTOR_HPP_INCLUDED // Copyright 2008-2024 Emil Dotchevski and Reverge Studios, Inc. // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #if defined(BOOST_QVM_TEST_SINGLE_HEADER) && !defined(BOOST_QVM_TEST_SINGLE_HEADER) # define BOOST_QVM_TEST_REF_WRITE_ELEMENT #endif #include #include #include #include "test_qvm.hpp" namespace test_qvm { template struct vector { T a[Dim]; mutable T b[Dim]; explicit vector( T start=T(0), T step=T(0) ) { for( int i=0; i!=Dim; ++i,start+=step ) a[i]=b[i]=start; } }; template void dump_ab( vector const & a, vector const & b ) { detail::dump_ab(a.a,b.a); } } namespace boost { namespace qvm { #ifdef BOOST_QVM_TEST_REF_WRITE_ELEMENT template struct vec_traits< test_qvm::vector >: vec_traits_defaults,T,Dim> { typedef vec_traits_defaults,T,Dim> base; template static T & write_element( typename base::vec_type & v ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I struct vec_traits< test_qvm::vector > { typedef test_qvm::vector this_vector; typedef T scalar_type; static int const dim=Dim; template static T read_element( this_vector const & v ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I static void write_element( this_vector & v, T s ) { BOOST_QVM_STATIC_ASSERT(I>=0); BOOST_QVM_STATIC_ASSERT(I=0); BOOST_QVM_ASSERT(i=0); BOOST_QVM_ASSERT(i struct deduce_vec2,test_qvm::vector,Dim> { typedef test_qvm::vector type; }; } } namespace { struct V1; struct V2; struct V3; } #endif