9 #include <stk_mesh/base/DataTraits.hpp> 11 #include <stk_util/environment/ReportHandler.hpp> 18 template<
typename EnumType >
class DataTraitsEnum ;
25 template<
typename T >
26 class DataTraitsEnum :
public DataTraits {
28 DataTraitsEnum(
const char * name , std::size_t n )
29 : DataTraits( typeid(T) , name , sizeof(T) , sizeof(T) )
33 enum_info.reserve( n );
36 void add_member(
const char * n , T v )
38 const std::size_t i = enum_info.size();
39 enum_info.resize( i + 1 );
40 enum_info[i].name.assign( n );
41 enum_info[i].value =
static_cast<long>( v );
44 void construct(
void * v , std::size_t n )
const 46 const T init =
static_cast<T
>( enum_info.front().value );
47 T * x =
reinterpret_cast<T*
>(v);
48 T *
const x_end = x + n ;
49 while ( x_end != x ) { *x++ = init ; }
52 void destroy(
void * v , std::size_t n )
const {}
54 void copy(
void * vx ,
const void * vy , std::size_t n )
const 56 const T * y =
reinterpret_cast<const T*
>(vy);
57 T * x =
reinterpret_cast<T*
>(vx);
58 T *
const x_end = x + n ;
59 while ( x_end != x ) { *x++ = *y++ ; }
62 void max(
void * vx ,
const void * vy , std::size_t n )
const 64 const T * y =
reinterpret_cast<const T*
>(vy);
65 T * x =
reinterpret_cast<T*
>(vx);
66 T *
const x_end = x + n ;
67 for ( ; x_end != x ; ++x , ++y ) {
if ( *x < *y ) { *x = *y ; } }
70 void min(
void * vx ,
const void * vy , std::size_t n )
const 72 const T * y =
reinterpret_cast<const T*
>(vy);
73 T * x =
reinterpret_cast<T*
>(vx);
74 T *
const x_end = x + n ;
75 for ( ; x_end != x ; ++x , ++y ) {
if ( *x > *y ) { *x = *y ; } }
78 void print_one( std::ostream & s , T v )
const 80 std::vector<EnumMember>::const_iterator i = enum_info.begin();
81 for ( ; i != enum_info.end() && i->value != v ; ++i );
82 if ( i != enum_info.end() ) {
86 s << name <<
"( " <<
static_cast<long>( v ) <<
" VALUE_NOT_VALID )" ;
90 void print( std::ostream & s ,
const void * v , std::size_t n )
const 93 const T * x =
reinterpret_cast<const T*
>(v);
94 const T *
const x_end = x + n ;
95 print_one( s , *x++ );
96 while ( x_end != x ) { s <<
" " ; print_one( s , *x++ ); }
100 void pack( CommBuffer & buf ,
const void * v , std::size_t n )
const 102 const T * x =
reinterpret_cast<const T*
>(v);
103 buf.pack<T>( x , n );
106 void unpack( CommBuffer & buf ,
void * v , std::size_t n )
const 108 T * x =
reinterpret_cast<T*
>(v);
109 buf.unpack<T>( x , n );
112 void sum(
void * ,
const void * , std::size_t )
const 113 { ThrowErrorMsg(
"not supported" ); }
115 void bit_and(
void * ,
const void * , std::size_t )
const 116 { ThrowErrorMsg(
"not supported" ); }
118 void bit_or(
void * ,
const void * , std::size_t )
const 119 { ThrowErrorMsg(
"not supported" ); }
121 void bit_xor(
void * ,
const void * , std::size_t )
const 122 { ThrowErrorMsg(
"not supported" ); }
129 #define DATA_TRAITS_ENUM_1( T , V1 ) \ 131 class DataTraitsEnum ## T : public DataTraitsEnum<T> { \ 133 DataTraitsEnum ## T () : DataTraitsEnum<T>( # T , 1 ) \ 134 { add_member( # V1 , V1 ); } \ 137 template<> const DataTraits & data_traits< T >() \ 138 { static const DataTraitsEnum ## T traits ; return traits ; } 142 #define DATA_TRAITS_ENUM_2( T , V1 , V2 ) \ 144 class DataTraitsEnum ## T : public DataTraitsEnum<T> { \ 146 DataTraitsEnum ## T () : DataTraitsEnum<T>( # T , 2 ) \ 148 add_member( # V1 , V1 ); \ 149 add_member( # V2 , V2 ); \ 153 template<> const DataTraits & data_traits< T >() \ 154 { static const DataTraitsEnum ## T traits ; return traits ; } 158 #define DATA_TRAITS_ENUM_3( T , V1 , V2 , V3 ) \ 160 class DataTraitsEnum ## T : public DataTraitsEnum<T> { \ 162 DataTraitsEnum ## T () : DataTraitsEnum<T>( # T , 3 ) \ 164 add_member( # V1 , V1 ); \ 165 add_member( # V2 , V2 ); \ 166 add_member( # V3 , V3 ); \ 170 template<> const DataTraits & data_traits< T >() \ 171 { static const DataTraitsEnum ## T 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)