13 #ifndef TEUCHOS_SERIALIZATION_TRAITS_HPP 
   14 #define TEUCHOS_SERIALIZATION_TRAITS_HPP 
   20 #ifdef HAVE_TEUCHOSCORE_QUADMATH 
   22 #endif // HAVE_TEUCHOSCORE_QUADMATH 
   24 #ifdef HAVE_TEUCHOS_QD 
   25 #include <qd/dd_real.h> 
   26 #include <qd/qd_real.h> 
   40   static inline T 
notDefined() {
return(T::this_type_is_missing_a_specialization());}
 
   97 template <
typename Ordinal, 
typename T>
 
  165     (void)count; (void)buffer;
 
  190     (void)count; (void)buffer; (void)bytes; (void)charBuffer;
 
  196                                           const char charBuffer[]) {
 
  197     (void)bytes; (void)charBuffer;
 
  218                            const char charBuffer[],
 
  222     (void)bytes; (void)charBuffer; (void)count; (void)buffer;
 
  243 template <
typename Ordinal, 
typename T>
 
  278 template <
typename Ordinal, 
typename T>
 
  281   static const bool supportsDirectSerialization = 
true;
 
  283   static Ordinal fromCountToDirectBytes(
const Ordinal count)
 
  284     { 
return sizeof(T)*count; }
 
  285   static char* convertToCharPtr( T* ptr )
 
  286     { 
return reinterpret_cast<char*
>(ptr); }
 
  287   static const char* convertToCharPtr( 
const T* ptr )
 
  288     { 
return reinterpret_cast<const char*
>(ptr); }
 
  289   static Ordinal fromDirectBytesToCount(
const Ordinal count)
 
  290     { 
return count/
sizeof(T); }
 
  291   static T* convertFromCharPtr( 
char* ptr )
 
  292     { 
return reinterpret_cast<T*
>(ptr); }
 
  293   static const T* convertFromCharPtr( 
const char* ptr )
 
  294     { 
return reinterpret_cast<const T*
>(ptr); }
 
  296   static Ordinal fromCountToIndirectBytes(
const Ordinal count, 
const T buffer[])
 
  297     { 
return fromCountToDirectBytes(count); }
 
  298   static void serialize(
 
  299     const Ordinal count, 
const T buffer[], 
const Ordinal bytes, 
char charBuffer[]
 
  307       const char *_buffer = convertToCharPtr(buffer);
 
  308       std::copy(_buffer,_buffer+bytes,charBuffer);
 
  310   static Ordinal fromIndirectBytesToCount(
const Ordinal bytes,
 
  311                                           const char charBuffer[])
 
  312     { 
return fromDirectBytesToCount(bytes); }
 
  313   static void deserialize(
 
  314     const Ordinal bytes, 
const char charBuffer[], 
const Ordinal count, T buffer[]
 
  320       char *_buffer = convertToCharPtr(buffer);
 
  321       std::copy(charBuffer,charBuffer+bytes,_buffer);
 
  330 template<
typename Ordinal>
 
  335 template<
typename Ordinal>
 
  336 class SerializationTraits<Ordinal,signed char>
 
  337   : 
public DirectSerializationTraits<Ordinal,signed char>
 
  340 template<
typename Ordinal>
 
  341 class SerializationTraits<Ordinal,unsigned char>
 
  342   : 
public DirectSerializationTraits<Ordinal,unsigned char>
 
  345 template<
typename Ordinal>
 
  346 class SerializationTraits<Ordinal,short int>
 
  347   : 
public DirectSerializationTraits<Ordinal,short int>
 
  350 template<
typename Ordinal>
 
  351 class SerializationTraits<Ordinal,unsigned short int>
 
  352   : 
public DirectSerializationTraits<Ordinal,unsigned short int>
 
  355 template<
typename Ordinal>
 
  356 class SerializationTraits<Ordinal,int>
 
  357   : 
public DirectSerializationTraits<Ordinal,int>
 
  360 template<
typename Ordinal>
 
  361 class SerializationTraits<Ordinal,unsigned int>
 
  362   : 
public DirectSerializationTraits<Ordinal,unsigned int>
 
  365 template<
typename Ordinal>
 
  366 class SerializationTraits<Ordinal,long int>
 
  367   : 
public DirectSerializationTraits<Ordinal,long int>
 
  370 template<
typename Ordinal>
 
  371 class SerializationTraits<Ordinal,unsigned long int>
 
  372   : 
public DirectSerializationTraits<Ordinal,long unsigned int>
 
  375 template<
typename Ordinal>
 
  376 class SerializationTraits<Ordinal,float>
 
  377   : 
public DirectSerializationTraits<Ordinal,float>
 
  380 template<
typename Ordinal>
 
  381 class SerializationTraits<Ordinal,double>
 
  382   : 
public DirectSerializationTraits<Ordinal,double>
 
  385 #ifdef HAVE_TEUCHOS_LONG_DOUBLE 
  386 template<
typename Ordinal>
 
  387 class SerializationTraits<Ordinal,long double>
 
  388   : 
public DirectSerializationTraits<Ordinal,long double>
 
  394 template<
typename Ordinal, 
typename P1, 
typename P2>
 
  395 class SerializationTraits<Ordinal,std::pair<P1,P2> >
 
  396   : 
public DirectSerializationTraits<Ordinal,std::pair<P1,P2> >
 
  399 #ifdef HAVE_TEUCHOSCORE_QUADMATH 
  400 template<
typename Ordinal>
 
  401 class SerializationTraits<Ordinal,__float128>
 
  402   : 
public DirectSerializationTraits<Ordinal,__float128>
 
  404 #endif // HAVE_TEUCHOSCORE_QUADMATH 
  406 #ifdef HAVE_TEUCHOS_QD 
  407 template<
typename Ordinal>
 
  408 class SerializationTraits<Ordinal,dd_real>
 
  409   : 
public DirectSerializationTraits<Ordinal,dd_real>
 
  412 template<
typename Ordinal>
 
  413 class SerializationTraits<Ordinal,qd_real>
 
  414   : 
public DirectSerializationTraits<Ordinal,qd_real>
 
  418 #ifdef HAVE_TEUCHOS_COMPLEX 
  420 template<
typename Ordinal>
 
  421 class SerializationTraits<Ordinal,std::complex<float> >
 
  422   : 
public DirectSerializationTraits<Ordinal,std::complex<float> >
 
  425 template<
typename Ordinal>
 
  426 class SerializationTraits<Ordinal,std::complex<double> >
 
  427   : 
public DirectSerializationTraits<Ordinal,std::complex<double> >
 
  430 #endif // HAVE_TEUCHOS_COMPLEX 
  437 template<
typename Ordinal>
 
  438 class SerializationTraits<Ordinal, long long int>
 
  439   : 
public DirectSerializationTraits<Ordinal, long long int>
 
  447 template<
typename Ordinal>
 
  448 class SerializationTraits<Ordinal, unsigned long long int>
 
  449   : 
public DirectSerializationTraits<Ordinal, unsigned long long int>
 
  454 #endif // TEUCHOS_SERIALIZATION_TRAITS_HPP 
Serialization traits for objects that support direct serialization. 
static char * convertToCharPtr(T *ptr)
Convert the pointer type to char*. 
static const char * convertToCharPtr(const T *ptr)
Convert the pointer type to const char*. 
static T notDefined()
This function should not compile if there is an attempt to instantiate! 
static Ordinal fromCountToIndirectBytes(const Ordinal count, const T buffer[])
Return the number of bytes for count objects. 
static const bool supportsDirectSerialization
Whether the type T supports direct serialization. 
Teuchos header file which uses auto-configuration information to include necessary C++ headers...
static void deserialize(const Ordinal bytes, const char charBuffer[], const Ordinal count, T buffer[])
Deserialize from an indirect char[] buffer. 
Serialization class for types T that use value semantics. 
static Ordinal fromIndirectBytesToCount(const Ordinal bytes, const char charBuffer[])
Return the number of objects for bytes of storage. 
static T * convertFromCharPtr(char *ptr)
Convert the pointer type from char*. 
static const T * convertFromCharPtr(const char *ptr)
Convert the pointer type from char*. 
Report an error if a specialization of SerializationTraits is missing. 
Serialization traits class for types T that use value semantics. 
Standard test and throw macros. 
static Ordinal fromDirectBytesToCount(const Ordinal bytes)
Return the number of objects for bytes of storage. 
static void serialize(const Ordinal count, const T buffer[], const Ordinal bytes, char charBuffer[])
Serialize to an indirect char[] buffer. 
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
This macro is designed to be a short version of TEUCHOS_TEST_FOR_EXCEPTION() that is easier to call...
static Ordinal fromCountToDirectBytes(const Ordinal count)
Return the number of bytes for count objects.