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
459 template<
typename Ordinal>
460 class SerializationTraits<Ordinal, long long int>
461 :
public DirectSerializationTraits<Ordinal, long long int>
469 template<
typename Ordinal>
470 class SerializationTraits<Ordinal, unsigned long long int>
471 :
public DirectSerializationTraits<Ordinal, unsigned long long int>
476 #endif // TEUCHOS_SERIALIZATION_TRAITS_HPP