45 #ifndef TEUCHOS_SERIALIZATION_TRAITS_HPP 46 #define TEUCHOS_SERIALIZATION_TRAITS_HPP 52 #ifdef HAVE_TEUCHOSCORE_QUADMATH 54 #endif // 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[]
337 const char *_buffer = convertToCharPtr(buffer);
338 std::copy(_buffer,_buffer+bytes,charBuffer);
340 static Ordinal fromIndirectBytesToCount(
const Ordinal bytes,
341 const char charBuffer[])
342 {
return fromDirectBytesToCount(bytes); }
343 static void deserialize(
344 const Ordinal bytes,
const char charBuffer[],
const Ordinal count, T buffer[]
350 char *_buffer = convertToCharPtr(buffer);
351 std::copy(charBuffer,charBuffer+bytes,_buffer);
360 template<
typename Ordinal>
365 template<
typename Ordinal>
366 class SerializationTraits<Ordinal,signed char>
367 :
public DirectSerializationTraits<Ordinal,signed char>
370 template<
typename Ordinal>
371 class SerializationTraits<Ordinal,unsigned char>
372 :
public DirectSerializationTraits<Ordinal,unsigned char>
375 template<
typename Ordinal>
376 class SerializationTraits<Ordinal,short int>
377 :
public DirectSerializationTraits<Ordinal,short int>
380 template<
typename Ordinal>
381 class SerializationTraits<Ordinal,unsigned short int>
382 :
public DirectSerializationTraits<Ordinal,unsigned short int>
385 template<
typename Ordinal>
386 class SerializationTraits<Ordinal,int>
387 :
public DirectSerializationTraits<Ordinal,int>
390 template<
typename Ordinal>
391 class SerializationTraits<Ordinal,unsigned int>
392 :
public DirectSerializationTraits<Ordinal,unsigned int>
395 template<
typename Ordinal>
396 class SerializationTraits<Ordinal,long int>
397 :
public DirectSerializationTraits<Ordinal,long int>
400 template<
typename Ordinal>
401 class SerializationTraits<Ordinal,unsigned long int>
402 :
public DirectSerializationTraits<Ordinal,long unsigned int>
405 template<
typename Ordinal>
406 class SerializationTraits<Ordinal,float>
407 :
public DirectSerializationTraits<Ordinal,float>
410 template<
typename Ordinal>
411 class SerializationTraits<Ordinal,double>
412 :
public DirectSerializationTraits<Ordinal,double>
416 template<
typename Ordinal,
typename P1,
typename P2>
417 class SerializationTraits<Ordinal,std::pair<P1,P2> >
418 :
public DirectSerializationTraits<Ordinal,std::pair<P1,P2> >
421 #ifdef HAVE_TEUCHOSCORE_QUADMATH 422 template<
typename Ordinal>
423 class SerializationTraits<Ordinal,__float128>
424 :
public DirectSerializationTraits<Ordinal,__float128>
426 #endif // HAVE_TEUCHOSCORE_QUADMATH 428 #ifdef HAVE_TEUCHOS_QD 429 template<
typename Ordinal>
430 class SerializationTraits<Ordinal,dd_real>
431 :
public DirectSerializationTraits<Ordinal,dd_real>
434 template<
typename Ordinal>
435 class SerializationTraits<Ordinal,qd_real>
436 :
public DirectSerializationTraits<Ordinal,qd_real>
440 #ifdef HAVE_TEUCHOS_COMPLEX 442 template<
typename Ordinal>
443 class SerializationTraits<Ordinal,std::complex<float> >
444 :
public DirectSerializationTraits<Ordinal,std::complex<float> >
447 template<
typename Ordinal>
448 class SerializationTraits<Ordinal,std::complex<double> >
449 :
public DirectSerializationTraits<Ordinal,std::complex<double> >
452 #endif // HAVE_TEUCHOS_COMPLEX 454 #if defined(HAVE_TEUCHOS_LONG_LONG_INT) 461 template<
typename Ordinal>
462 class SerializationTraits<Ordinal, long long int>
463 :
public DirectSerializationTraits<Ordinal, long long int>
471 template<
typename Ordinal>
472 class SerializationTraits<Ordinal, unsigned long long int>
473 :
public DirectSerializationTraits<Ordinal, unsigned long long int>
480 #elif SIZE_MAX > ULONG_MAX 489 template<
typename Ordinal>
490 class SerializationTraits<Ordinal, size_t>
491 :
public DirectSerializationTraits<Ordinal, size_t>
494 template<
typename Ordinal>
495 class SerializationTraits<Ordinal, ptrdiff_t>
496 :
public DirectSerializationTraits<Ordinal, ptrdiff_t>
499 #endif // HAVE_TEUCHOS_LONG_LONG_INT 503 #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.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos, as well as a number of utility routines.
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.