Skip to content
Snippets Groups Projects

Use type traits to consolidate primitive and complex template methods

3 files
+ 61
165
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -18,6 +18,7 @@
@@ -18,6 +18,7 @@
/// \endcond
/// \endcond
#include "ADIOSMacros.h"
#include "ADIOSMacros.h"
 
#include "ADIOSTypes.h"
#include "utilities/format/bp1/BP1Base.h"
#include "utilities/format/bp1/BP1Base.h"
#include "utilities/format/bp1/BP1Structs.h"
#include "utilities/format/bp1/BP1Structs.h"
@@ -83,7 +84,7 @@ public:
@@ -83,7 +84,7 @@ public:
noexcept;
noexcept;
/**
/**
* Version for primitive types (except std::complex<T>)
* Write metadata for a given variable
* @param variable
* @param variable
* @param heap
* @param heap
* @param metadataSet
* @param metadataSet
@@ -93,17 +94,6 @@ public:
@@ -93,17 +94,6 @@ public:
capsule::STLVector &heap,
capsule::STLVector &heap,
BP1MetadataSet &metadataSet) const noexcept;
BP1MetadataSet &metadataSet) const noexcept;
/**
* Overloaded version for std::complex<T> variables
* @param variable
* @param heap
* @param metadataSet
*/
template <class T>
void WriteVariableMetadata(const Variable<std::complex<T>> &variable,
capsule::STLVector &heap,
BP1MetadataSet &metadataSet) const noexcept;
/**
/**
* Expensive part this is only for heap buffers need to adapt to vector of
* Expensive part this is only for heap buffers need to adapt to vector of
* capsules
* capsules
@@ -150,36 +140,23 @@ public:
@@ -150,36 +140,23 @@ public:
noexcept;
noexcept;
private:
private:
/**
template <class T>
* Common function called from WriterVariableMetadata for primitive and
void WriteVariableMetadataInData(
* complex types
const Variable<T> &variable,
* @param variable
const Stats<typename TypeInfo<T>::ValueType> &stats,
* @param stats
capsule::STLVector &heap) const noexcept;
* @param heap
* @param metadataSet
*/
template <class T, class U>
void WriteVariableMetadataCommon(const Variable<T> &variable,
Stats<U> &stats, capsule::STLVector &heap,
BP1MetadataSet &metadataSet) const
noexcept;
template <class T, class U>
void WriteVariableMetadataInData(const Variable<T> &variable,
const Stats<U> &stats,
capsule::STLVector &heap) const noexcept;
template <class T, class U>
template <class T>
void WriteVariableMetadataInIndex(const Variable<T> &variable,
void WriteVariableMetadataInIndex(
const Stats<U> &stats, const bool isNew,
const Variable<T> &variable,
BP1Index &index) const noexcept;
const Stats<typename TypeInfo<T>::ValueType> &stats, const bool isNew,
 
BP1Index &index) const noexcept;
template <class T, class U>
template <class T>
void WriteVariableCharacteristics(const Variable<T> &variable,
void WriteVariableCharacteristics(
const Stats<U> &stats,
const Variable<T> &variable,
std::vector<char> &buffer,
const Stats<typename TypeInfo<T>::ValueType> &stats,
const bool addLength = false) const
std::vector<char> &buffer, const bool addLength = false) const noexcept;
noexcept;
/**
/**
* Writes from &buffer[position]: [2
* Writes from &buffer[position]: [2
@@ -212,20 +189,13 @@ private:
@@ -212,20 +189,13 @@ private:
const bool addType = false) const noexcept;
const bool addType = false) const noexcept;
/**
/**
* GetStats for primitive types except std::complex<T> types
* Get variable statistics
* @param variable
* @return stats
*/
template <class T>
Stats<T> GetStats(const Variable<T> &variable) const noexcept;
/**
* GetStats for std::complex<T> types
* @param variable
* @param variable
* @return stats
* @return stats
*/
*/
template <class T>
template <class T>
Stats<T> GetStats(const Variable<std::complex<T>> &variable) const noexcept;
Stats<typename TypeInfo<T>::ValueType>
 
GetStats(const Variable<T> &variable) const noexcept;
template <class T>
template <class T>
void WriteBoundsRecord(const bool isScalar, const Stats<T> &stats,
void WriteBoundsRecord(const bool isScalar, const Stats<T> &stats,
@@ -282,28 +252,13 @@ private:
@@ -282,28 +252,13 @@ private:
#define declare_template_instantiation(T) \
#define declare_template_instantiation(T) \
extern template void BP1Writer::WriteVariablePayload( \
extern template void BP1Writer::WriteVariablePayload( \
const Variable<T> &variable, capsule::STLVector &heap, \
const Variable<T> &variable, capsule::STLVector &heap, \
const unsigned int nthreads) const noexcept;
const unsigned int nthreads) const noexcept; \
\
ADIOS_FOREACH_TYPE_1ARG(declare_template_instantiation)
#undef declare_template_instantiation
// SEPARATE PRIMITIVE FROM COMPLEX OVERLOADS
// PRIMITIVE
#define declare_template_instantiation(T) \
extern template void BP1Writer::WriteVariableMetadata( \
extern template void BP1Writer::WriteVariableMetadata( \
const Variable<T> &variable, capsule::STLVector &heap, \
const Variable<T> &variable, capsule::STLVector &heap, \
BP1MetadataSet &metadataSet) const noexcept;
BP1MetadataSet &metadataSet) const noexcept;
ADIOS_FOREACH_PRIMITIVE_TYPE_1ARG(declare_template_instantiation)
ADIOS_FOREACH_TYPE_1ARG(declare_template_instantiation)
#undef declare_template_instantiation
// COMPLEX
#define declare_template_instantiation(T) \
extern template void BP1Writer::WriteVariableMetadata( \
const Variable<std::complex<T>> &variable, capsule::STLVector &heap, \
BP1MetadataSet &metadataSet) const noexcept;
ADIOS_FOREACH_COMPLEX_TYPE_1ARG(declare_template_instantiation)
#undef declare_template_instantiation
#undef declare_template_instantiation
} // end namespace format
} // end namespace format
Loading