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.