Skip to content
Snippets Groups Projects
Engine.h 4.75 KiB
Newer Older
/*
 * Capsule.h
 *
 *  Created on: Nov 7, 2016
 *      Author: wfg
 */

#ifndef ENGINE_H_
#define ENGINE_H_


/// \cond EXCLUDE_FROM_DOXYGEN
#include <vector>
#include <string>
#include <memory> //std::shared_ptr
#include <map>
/// \endcond

#ifdef HAVE_MPI
  #include <mpi.h>
#else
  #include "mpidummy.h"
#endif

#include "core/Method.h"
#include "core/Group.h"
#include "core/Variable.h"
#include "core/Transform.h"
#include "core/Transport.h"
#include "core/Capsule.h"


namespace adios
{

/**
 * Base class for Engine operations managing shared-memory, and buffer and variables transform and transport operations
 */
class Engine
{

public:

    #ifdef HAVE_MPI
    MPI_Comm m_MPIComm = NULL; ///< only used as reference to MPI communicator passed from parallel constructor, MPI_Comm is a pointer itself. Public as called from C
    #else
    MPI_Comm m_MPIComm = 0; ///< only used as reference to MPI communicator passed from parallel constructor, MPI_Comm is a pointer itself. Public as called from C
    #endif

wfg's avatar
wfg committed
    std::string m_EngineType; ///< from derived class
    const std::string m_Name; ///< name used for this engine
    const std::string m_AccessMode; ///< accessMode for buffers used by this engine
    Method* m_Method = nullptr; ///< associated method containing engine metadata
    Group* m_Group = nullptr; ///< associated group to look for variable information

    int m_RankMPI = 0; ///< current MPI rank process
    int m_SizeMPI = 1; ///< current MPI processes size

    /**
wfg's avatar
wfg committed
     * Unique constructor based on a method (engine metadata)
     * @param engineType given by derived classes
     * @param name engine name
     * @param accessMode
     * @param mpiComm
wfg's avatar
wfg committed
     * @param method
wfg's avatar
wfg committed
    Engine( const std::string engineType, const std::string name, const std::string accessMode, const MPI_Comm mpiComm,
            const Method& method, const bool debugMode );
wfg's avatar
wfg committed
    virtual void Write( const Group& group, const std::string variableName, const char* values );
    virtual void Write( const Group& group, const std::string variableName, const unsigned char* values );
    virtual void Write( const Group& group, const std::string variableName, const short* values );
    virtual void Write( const Group& group, const std::string variableName, const unsigned short* values );
    virtual void Write( const Group& group, const std::string variableName, const int* values );
    virtual void Write( const Group& group, const std::string variableName, const unsigned int* values );
    virtual void Write( const Group& group, const std::string variableName, const long int* values );
    virtual void Write( const Group& group, const std::string variableName, const unsigned long int* values );
    virtual void Write( const Group& group, const std::string variableName, const long long int* values );
    virtual void Write( const Group& group, const std::string variableName, const unsigned long long int* values );
    virtual void Write( const Group& group, const std::string variableName, const float* values );
    virtual void Write( const Group& group, const std::string variableName, const double* values );
    virtual void Write( const Group& group, const std::string variableName, const long double* values );

    virtual void Write( const std::string variableName, const char* values );
    virtual void Write( const std::string variableName, const unsigned char* values );
    virtual void Write( const std::string variableName, const short* values );
    virtual void Write( const std::string variableName, const unsigned short* values );
    virtual void Write( const std::string variableName, const int* values );
    virtual void Write( const std::string variableName, const unsigned int* values );
    virtual void Write( const std::string variableName, const long int* values );
    virtual void Write( const std::string variableName, const unsigned long int* values );
    virtual void Write( const std::string variableName, const long long int* values );
    virtual void Write( const std::string variableName, const unsigned long long int* values );
    virtual void Write( const std::string variableName, const float* values );
    virtual void Write( const std::string variableName, const double* values );
    virtual void Write( const std::string variableName, const long double* values );

    virtual void Close( int transportIndex = -1  ); ///< Closes a particular transport


protected:

    std::vector< std::shared_ptr<Transport> > m_Transports; ///< transports managed
wfg's avatar
wfg committed
    std::vector< std::shared_ptr<Capsule> > m_Capsules; ///< managed Buffers
    bool m_DebugMode = false;

    void SetTransports( );
wfg's avatar
wfg committed
    std::string GetName( const std::vector<std::string>& arguments ) const; //might move this to adiosFunctions

};


} //end namespace

#endif /* ENGINE_H_ */