45 #ifndef TEUCHOS_SERIALIZATION_TRAITS_HPP
46 #define TEUCHOS_SERIALIZATION_TRAITS_HPP
52 #ifdef HAVE_TEUCHOSCORE_QUADMATH
56 #ifdef HAVE_TEUCHOS_QD
57 #include <qd/dd_real.h>
58 #include <qd/qd_real.h>
72 static inline T
notDefined() {
return(T::this_type_is_missing_a_specialization());}
129 template <
typename Ordinal,
typename T>
197 (void)count; (void)buffer;
222 (void)count; (void)buffer; (void)bytes; (void)charBuffer;
228 const char charBuffer[]) {
229 (void)bytes; (void)charBuffer;
250 const char charBuffer[],
254 (void)bytes; (void)charBuffer; (void)count; (void)buffer;
275 template <
typename Ordinal,
typename T>
310 template <
typename Ordinal,
typename T>
313 static const bool supportsDirectSerialization =
true;
315 static Ordinal fromCountToDirectBytes(
const Ordinal count)
316 {
return sizeof(T)*count; }
317 static char* convertToCharPtr( T* ptr )
318 {
return reinterpret_cast<char*
>(ptr); }
319 static const char* convertToCharPtr(
const T* ptr )
320 {
return reinterpret_cast<const char*
>(ptr); }
321 static Ordinal fromDirectBytesToCount(
const Ordinal count)
322 {
return count/
sizeof(T); }
323 static T* convertFromCharPtr(
char* ptr )
324 {
return reinterpret_cast<T*
>(ptr); }
325 static const T* convertFromCharPtr(
const char* ptr )
326 {
return reinterpret_cast<const T*
>(ptr); }
328 static Ordinal fromCountToIndirectBytes(
const Ordinal count,
const T buffer[])
329 {
return fromCountToDirectBytes(count); }
330 static void serialize(
331 const Ordinal count,
const T buffer[],
const Ordinal bytes,
char charBuffer[]
339 const char *_buffer = convertToCharPtr(buffer);
340 std::copy(_buffer,_buffer+bytes,charBuffer);
342 static Ordinal fromIndirectBytesToCount(
const Ordinal bytes,
343 const char charBuffer[])
344 {
return fromDirectBytesToCount(bytes); }
345 static void deserialize(
346 const Ordinal bytes,
const char charBuffer[],
const Ordinal count, T buffer[]
352 char *_buffer = convertToCharPtr(buffer);
353 std::copy(charBuffer,charBuffer+bytes,_buffer);
362 template<
typename Ordinal>
367 template<
typename Ordinal>
368 class SerializationTraits<Ordinal,signed char>
369 :
public DirectSerializationTraits<Ordinal,signed char>
372 template<
typename Ordinal>
373 class SerializationTraits<Ordinal,unsigned char>
374 :
public DirectSerializationTraits<Ordinal,unsigned char>
377 template<
typename Ordinal>
378 class SerializationTraits<Ordinal,short int>
379 :
public DirectSerializationTraits<Ordinal,short int>
382 template<
typename Ordinal>
383 class SerializationTraits<Ordinal,unsigned short int>
384 :
public DirectSerializationTraits<Ordinal,unsigned short int>
387 template<
typename Ordinal>
388 class SerializationTraits<Ordinal,int>
389 :
public DirectSerializationTraits<Ordinal,int>
392 template<
typename Ordinal>
393 class SerializationTraits<Ordinal,unsigned int>
394 :
public DirectSerializationTraits<Ordinal,unsigned int>
397 template<
typename Ordinal>
398 class SerializationTraits<Ordinal,long int>
399 :
public DirectSerializationTraits<Ordinal,long int>
402 template<
typename Ordinal>
403 class SerializationTraits<Ordinal,unsigned long int>
404 :
public DirectSerializationTraits<Ordinal,long unsigned int>
407 template<
typename Ordinal>
408 class SerializationTraits<Ordinal,float>
409 :
public DirectSerializationTraits<Ordinal,float>
412 template<
typename Ordinal>
413 class SerializationTraits<Ordinal,double>
414 :
public DirectSerializationTraits<Ordinal,double>
417 #ifdef HAVE_TEUCHOS_LONG_DOUBLE
418 template<
typename Ordinal>
419 class SerializationTraits<Ordinal,long double>
420 :
public DirectSerializationTraits<Ordinal,long double>
426 template<
typename Ordinal,
typename P1,
typename P2>
427 class SerializationTraits<Ordinal,std::pair<P1,P2> >
428 :
public DirectSerializationTraits<Ordinal,std::pair<P1,P2> >
431 #ifdef HAVE_TEUCHOSCORE_QUADMATH
432 template<
typename Ordinal>
433 class SerializationTraits<Ordinal,__float128>
434 :
public DirectSerializationTraits<Ordinal,__float128>
438 #ifdef HAVE_TEUCHOS_QD
439 template<
typename Ordinal>
440 class SerializationTraits<Ordinal,dd_real>
441 :
public DirectSerializationTraits<Ordinal,dd_real>
444 template<
typename Ordinal>
445 class SerializationTraits<Ordinal,qd_real>
446 :
public DirectSerializationTraits<Ordinal,qd_real>
450 #ifdef HAVE_TEUCHOS_COMPLEX
452 template<
typename Ordinal>
453 class SerializationTraits<Ordinal,std::complex<float> >
454 :
public DirectSerializationTraits<Ordinal,std::complex<float> >
457 template<
typename Ordinal>
458 class SerializationTraits<Ordinal,std::complex<double> >
459 :
public DirectSerializationTraits<Ordinal,std::complex<double> >
469 template<
typename Ordinal>
470 class SerializationTraits<Ordinal, long long int>
471 :
public DirectSerializationTraits<Ordinal, long long int>
479 template<
typename Ordinal>
480 class SerializationTraits<Ordinal, unsigned long long int>
481 :
public DirectSerializationTraits<Ordinal, unsigned long long int>
Teuchos header file which uses auto-configuration information to include necessary C++ headers.
Standard test and throw macros.
Serialization traits for objects that support direct serialization.
Serialization traits class for types T that use value semantics.
static const bool supportsDirectSerialization
Whether the type T supports direct serialization.
static void serialize(const Ordinal count, const T buffer[], const Ordinal bytes, char charBuffer[])
Serialize to an indirect char[] buffer.
static Ordinal fromIndirectBytesToCount(const Ordinal bytes, const char charBuffer[])
Return the number of objects for bytes of storage.
static Ordinal fromCountToDirectBytes(const Ordinal count)
Return the number of bytes for count objects.
static Ordinal fromDirectBytesToCount(const Ordinal bytes)
Return the number of objects for bytes of storage.
static void deserialize(const Ordinal bytes, const char charBuffer[], const Ordinal count, T buffer[])
Deserialize from an indirect char[] buffer.
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 * convertFromCharPtr(char *ptr)
Convert the pointer type from char*.
static const T * convertFromCharPtr(const char *ptr)
Convert the pointer type from char*.
static Ordinal fromCountToIndirectBytes(const Ordinal count, const T buffer[])
Return the number of bytes for count objects.
Serialization class for types T that use value semantics.
#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.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
Report an error if a specialization of SerializationTraits is missing.
static T notDefined()
This function should not compile if there is an attempt to instantiate!