-
William F Godoy authored
Callback Signature classes extend Operator Operators can be used per Variable, IO or Engine
William F Godoy authoredCallback Signature classes extend Operator Operators can be used per Variable, IO or Engine
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Operator.h 3.75 KiB
/*
* Distributed under the OSI-approved Apache License, Version 2.0. See
* accompanying file Copyright.txt for details.
*
* Operator.h : Base class for all derive operators classes under
* adios2/operator.
* This include callback functions, compression, etc.
*
* Created on: Oct 17, 2016
* Author: William F Godoy godoywf@ornl.gov
*/
#ifndef ADIOS2_CORE_OPERATOR_H_
#define ADIOS2_CORE_OPERATOR_H_
/// \cond EXCLUDE_FROM_DOXYGEN
#include <functional>
#include <string>
#include <vector>
/// \endcond
#include "adios2/ADIOSMacros.h"
#include "adios2/ADIOSTypes.h"
namespace adios2
{
class Operator
{
public:
/** From derived class */
const std::string m_Type;
/**
* Base class constructor
* @param type from derived class object: e.g. bzip2, zfp, callback
* @param debugMode true: extra exceptions checks
*/
Operator(const std::string type, const Params ¶meters,
const bool debugMode);
virtual ~Operator() = default;
#define declare_type(T) \
virtual void RunCallback1(const T *, const std::string &, \
const std::string &, const std::string &, \
const Dims &);
ADIOS2_FOREACH_TYPE_1ARG(declare_type)
#undef declare_type
/**
* Returns a conservative buffer size to hold input data for classes
* @param sizeIn size of input data to be compressed in bytes
* @return recommended allocation for output buffer
*/
virtual size_t BufferMaxSize(const size_t sizeIn) const;
/**
* Used by Zfp
* Returns a conservative buffer size to hold input data for classes
* @param dataIn
* @param dimensions
* @return recommended allocation for output buffer in bytes
*/
template <class T>
size_t BufferMaxSize(const T *dataIn, const Dims &dimensions,
const Params ¶ms) const;
/**
* BZip2 and Zfp common call
* @param dataIn
* @param dimensions
* @param elementSize
* @param type
* @param bufferOut
* @param parameters
* @return size of compressed buffer
*/
virtual size_t Compress(const void *dataIn, const Dims &dimensions,
const size_t elementSize, const std::string type,
void *bufferOut,
const Params ¶meters = Params()) const;
virtual size_t Decompress(const void *bufferIn, const size_t sizeIn,
void *dataOut, const size_t sizeOut) const;
/**
* Zfp signature
* @param bufferIn
* @param sizeIn
* @param dataOut
* @param dimensions
* @param type
* @return
*/
virtual size_t Decompress(const void *bufferIn, const size_t sizeIn,
void *dataOut, const Dims &dimensions,
const std::string type,
const Params ¶meters) const;
protected:
/** Parameters associated with a particular Operator */
Params m_Parameters;
/** true: extra exception checks, false: skip exception checks */
const bool m_DebugMode = false;
/**
* Used by CompressZfp
* Returns a conservative buffer size to hold input data for classes
* @param dataIn
* @param dimensions
* @param type
* @return conservative buffer size for allocation
*/
virtual size_t DoBufferMaxSize(const void *dataIn, const Dims &dimensions,
const std::string type,
const Params ¶meters) const;
private:
void CheckCallbackType(const std::string type) const;
};
} // end namespace adios2
#endif /* ADIOS2_CORE_OPERATOR_H_ */