9 #include <stk_mesh/base/DataTraits.hpp> 11 #include <stk_util/environment/ReportHandler.hpp> 20 template<
typename T >
21 class DataTraitsClassPOD :
public DataTraits {
23 DataTraitsClassPOD(
const char * name , std::size_t n )
24 : DataTraits( typeid(T) , name , sizeof(T) , 1 )
28 class_info.reserve( n );
31 void set_stride(
const void * first ,
const void * second )
33 stride_of =
reinterpret_cast<const unsigned char *
>(second) -
34 reinterpret_cast<const unsigned char *>(first);
37 void add_member(
const char * n ,
const DataTraits & t ,
38 const void * base ,
const void * member )
40 const std::size_t i = class_info.size();
41 const std::size_t d =
reinterpret_cast<const unsigned char *
>(member) -
42 reinterpret_cast<const unsigned char *>(base);
43 class_info.resize( i + 1 );
44 class_info[i].name.assign( n );
45 class_info[i].traits = & t ;
46 class_info[i].offset = d ;
47 if ( alignment_of < t.alignment_of ) { alignment_of = t.alignment_of ; }
50 void construct(
void * v , std::size_t n )
const 52 T * x =
reinterpret_cast<T*
>( v );
53 T *
const x_end = x + n ;
54 for ( ; x_end != x ; ++x ) {
new(x) T(); }
57 void destroy(
void * v , std::size_t n )
const 59 T * x =
reinterpret_cast<T*
>( v );
60 T *
const x_end = x + n ;
61 for ( ; x_end != x ; ++x ) { x->~T(); }
64 void copy(
void * vx ,
const void * vy , std::size_t n )
const 66 const T * y =
reinterpret_cast<const T*
>( vy );
67 T * x =
reinterpret_cast<T*
>( vx );
68 T *
const x_end = x + n ;
69 while ( x_end != x ) { *x++ = *y++ ; };
72 void pack( CommBuffer & buf ,
const void * v , std::size_t n )
const 74 const T * x =
reinterpret_cast<const T*
>( v );
78 void unpack( CommBuffer & buf ,
void * v , std::size_t n )
const 80 T * x =
reinterpret_cast<T*
>( v );
81 buf.unpack<T>( x , n );
84 void print( std::ostream & s ,
const void * v , std::size_t n )
const 85 { ThrowErrorMsg(
"not supported" ); }
87 void sum(
void * ,
const void * , std::size_t )
const 88 { ThrowErrorMsg(
"not supported" ); }
90 void max(
void * ,
const void * , std::size_t )
const 91 { ThrowErrorMsg(
"not supported" ); }
93 void min(
void * ,
const void * , std::size_t )
const 94 { ThrowErrorMsg(
"not supported" ); }
96 void bit_and(
void * ,
const void * , std::size_t )
const 97 { ThrowErrorMsg(
"not supported" ); }
99 void bit_or(
void * ,
const void * , std::size_t )
const 100 { ThrowErrorMsg(
"not supported" ); }
102 void bit_xor(
void * ,
const void * , std::size_t )
const 103 { ThrowErrorMsg(
"not supported" ); }
110 #define DATA_TRAITS_POD_CLASS_2( C , M1 , M2 ) \ 112 class DataTraitsClass ## C : public DataTraitsClassPOD<C> { \ 114 DataTraitsClass ## C () : DataTraitsClassPOD<C>( # C , 2 ) \ 117 set_stride( tmp , tmp + 1 ); \ 118 add_member( # M1 , data_traits( tmp->M1 ) , tmp , & tmp->M1 ); \ 119 add_member( # M2 , data_traits( tmp->M2 ) , tmp , & tmp->M2 ); \ 123 template<> const DataTraits & data_traits< C >() \ 124 { static const DataTraitsClass ## C traits ; return traits ; } 128 #define DATA_TRAITS_POD_CLASS_3( C , M1 , M2 , M3 ) \ 130 class DataTraitsClass ## C : public DataTraitsClassPOD<C> { \ 132 DataTraitsClass ## C () : DataTraitsClassPOD<C>( # C , 3 ) \ 135 set_stride( tmp , tmp + 1 ); \ 136 add_member( # M1 , data_traits( tmp->M1 ) , tmp , & tmp->M1 ); \ 137 add_member( # M2 , data_traits( tmp->M2 ) , tmp , & tmp->M2 ); \ 138 add_member( # M3 , data_traits( tmp->M3 ) , tmp , & tmp->M3 ); \ 142 template<> const DataTraits & data_traits< C >() \ 143 { static const DataTraitsClass ## C traits ; return traits ; } 147 #define DATA_TRAITS_POD_CLASS_4( C , M1 , M2 , M3 , M4 ) \ 149 class DataTraitsClass ## C : public DataTraitsClassPOD<C> { \ 151 DataTraitsClass ## C () : DataTraitsClassPOD<C>( # C , 4 ) \ 154 set_stride( tmp , tmp + 1 ); \ 155 add_member( # M1 , data_traits( tmp->M1 ) , tmp , & tmp->M1 ); \ 156 add_member( # M2 , data_traits( tmp->M2 ) , tmp , & tmp->M2 ); \ 157 add_member( # M3 , data_traits( tmp->M3 ) , tmp , & tmp->M3 ); \ 158 add_member( # M4 , data_traits( tmp->M4 ) , tmp , & tmp->M4 ); \ 162 template<> const DataTraits & data_traits< C >() \ 163 { static const DataTraitsClass ## C traits ; return traits ; } 167 #define DATA_TRAITS_POD_CLASS_5( C , M1 , M2 , M3 , M4 , M5 ) \ 169 class DataTraitsClass ## C : public DataTraitsClassPOD<C> { \ 171 DataTraitsClass ## C () : DataTraitsClassPOD<C>( # C , 5 ) \ 174 set_stride( tmp , tmp + 1 ); \ 175 add_member( # M1 , data_traits( tmp->M1 ) , tmp , & tmp->M1 ); \ 176 add_member( # M2 , data_traits( tmp->M2 ) , tmp , & tmp->M2 ); \ 177 add_member( # M3 , data_traits( tmp->M3 ) , tmp , & tmp->M3 ); \ 178 add_member( # M4 , data_traits( tmp->M4 ) , tmp , & tmp->M4 ); \ 179 add_member( # M5 , data_traits( tmp->M5 ) , tmp , & tmp->M5 ); \ 183 template<> const DataTraits & data_traits< C >() \ 184 { static const DataTraitsClass ## C traits ; return traits ; } 188 #define DATA_TRAITS_POD_CLASS_6( C , M1 , M2 , M3 , M4 , M5 , M6 ) \ 190 class DataTraitsClass ## C : public DataTraitsClassPOD<C> { \ 192 DataTraitsClass ## C () : DataTraitsClassPOD<C>( # C , 5 ) \ 195 set_stride( tmp , tmp + 1 ); \ 196 add_member( # M1 , data_traits( tmp->M1 ) , tmp , & tmp->M1 ); \ 197 add_member( # M2 , data_traits( tmp->M2 ) , tmp , & tmp->M2 ); \ 198 add_member( # M3 , data_traits( tmp->M3 ) , tmp , & tmp->M3 ); \ 199 add_member( # M4 , data_traits( tmp->M4 ) , tmp , & tmp->M4 ); \ 200 add_member( # M5 , data_traits( tmp->M5 ) , tmp , & tmp->M5 ); \ 201 add_member( # M6 , data_traits( tmp->M6 ) , tmp , & tmp->M6 ); \ 205 template<> const DataTraits & data_traits< C >() \ 206 { static const DataTraitsClass ## C traits ; return traits ; } std::ostream & print(std::ostream &os, const std::string &indent, const Bucket &bucket)
Print the parts and entities of this bucket.
OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result)