diff --git a/source/adios2/engine/bp/BPFileReader.cpp b/source/adios2/engine/bp/BPFileReader.cpp index dccbb3338dd2903073bc0b144ccbc19fd7f77355..939e7556decc20dc7202ce75863ab507f6b812d8 100644 --- a/source/adios2/engine/bp/BPFileReader.cpp +++ b/source/adios2/engine/bp/BPFileReader.cpp @@ -5,32 +5,45 @@ * BPFileReader.cpp * * Created on: Feb 27, 2017 - * Author: wfg + * Author: William F Godoy godoywf@ornl.gov */ #include "BPFileReader.h" -#include "../../helper/adiosFunctions.h" // CSVToVector -#include "../../toolkit/transport/file/FileDescriptor.h" // uses POSIX -#include "../../toolkit/transport/file/FilePointer.h" // uses C FILE* -#include "../../toolkit/transport/file/FileStream.h" // uses C++ fstream -#include "adios2/core/Support.h" +#include "adios2/helper/adiosFunctions.h" // CSVToVector namespace adios { -BPFileReader::BPFileReader(ADIOS &adios, const std::string &name, - const std::string accessMode, MPI_Comm mpiComm, - const Method &method) -: Engine(adios, "BPFileReader", name, accessMode, mpiComm, method, - " BPFileReader constructor (or call to ADIOS Open).\n"), - m_Heap(m_DebugMode) +BPFileReader::BPFileReader(IO &io, const std::string &name, + const OpenMode openMode, MPI_Comm mpiComm) +: Engine("BPFileReader", io, name, openMode, mpiComm) { Init(); } -Variable<void> *BPFileReader::InquireVariable(const std::string & /*name*/, - const bool /*readIn*/) +void BPFileReader::Close(const int /*transportIndex*/) {} + +// PRIVATE +void BPFileReader::Init() +{ + if (m_DebugMode == true) + { + if (m_OpenMode != OpenMode::r && m_OpenMode != OpenMode::Read) + { + throw std::invalid_argument( + "ERROR: BPFileReader only supports OpenMode::r from" + m_Name + + " " + m_EndMessage); + } + } + + InitTransports(); +} + +void BPFileReader::InitTransports() {} + +VariableBase *BPFileReader::InquireVariableUnknown(const std::string & /*name*/, + const bool /*readIn*/) { // not yet implemented return nullptr; @@ -140,92 +153,4 @@ BPFileReader::InquireVariableCompound(const std::string & /*name*/, return nullptr; } -void BPFileReader::Close(const int /*transportIndex*/) {} - -// PRIVATE -void BPFileReader::Init() -{ - if (m_DebugMode == true) - { - if (m_AccessMode != "r" && m_AccessMode != "read") - { - throw std::invalid_argument( - "ERROR: BPFileReader doesn't support access mode " + - m_AccessMode + - ", in call to ADIOS Open or BPFileReader constructor\n"); - } - } - - InitTransports(); -} - -void BPFileReader::InitTransports() // maybe move this? -{ - if (m_DebugMode == true) - { - if (TransportNamesUniqueness() == false) - { - throw std::invalid_argument( - "ERROR: two transports of the same kind (e.g file IO) " - "can't have the same name, modify with name= in Method " - "AddTransport\n"); - } - } - - for (const auto ¶meters : m_Method.m_TransportParameters) - { - auto itTransport = parameters.find("transport"); - if (itTransport->second == "file" || itTransport->second == "File") - { - auto itLibrary = parameters.find("library"); - if (itLibrary == parameters.end() || - itLibrary->second == "POSIX") // use default POSIX - { - auto file = std::make_shared<transport::FileDescriptor>( - m_MPIComm, m_DebugMode); - // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file ); - m_Transports.push_back(std::move(file)); - } - else if (itLibrary->second == "FILE*" || - itLibrary->second == "stdio.h") - { - auto file = std::make_shared<transport::FilePointer>( - m_MPIComm, m_DebugMode); - // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file ); - m_Transports.push_back(std::move(file)); - } - else if (itLibrary->second == "fstream" || - itLibrary->second == "std::fstream") - { - auto file = std::make_shared<transport::FStream>(m_MPIComm, - m_DebugMode); - // m_BP1Reader.OpenRankFiles( m_Name, m_AccessMode, *file ); - m_Transports.push_back(std::move(file)); - } - else if (itLibrary->second == "MPI-IO") - { - } - else - { - if (m_DebugMode == true) - { - throw std::invalid_argument( - "ERROR: file transport library " + itLibrary->second + - " not supported, in " + m_Name + m_EndMessage); - } - } - } - else - { - if (m_DebugMode == true) - { - throw std::invalid_argument( - "ERROR: transport " + itTransport->second + - " (you mean File?) not supported, in " + m_Name + - m_EndMessage); - } - } - } -} - } // end namespace adios diff --git a/source/adios2/engine/bp/BPFileReader.h b/source/adios2/engine/bp/BPFileReader.h index 71d88ae0c3cd620dd70bb9a142fb407ad743e88e..5302d485425532ad62949385ff14ab96cfc35a09 100644 --- a/source/adios2/engine/bp/BPFileReader.h +++ b/source/adios2/engine/bp/BPFileReader.h @@ -2,18 +2,15 @@ * Distributed under the OSI-approved Apache License, Version 2.0. See * accompanying file Copyright.txt for details. * - * BPReader.h + * BPFileReader.h * * Created on: Feb 27, 2017 - * Author: wfg + * Author: William F Godoy godoywf@ornl.gov */ #ifndef ADIOS2_ENGINE_BP_BPFILEREADER_H_ #define ADIOS2_ENGINE_BP_BPFILEREADER_H_ -#include <iostream> //this must go away - -#include "../../toolkit/capsule/heap/STLVector.h" #include "adios2/ADIOSConfig.h" #include "adios2/core/Engine.h" @@ -25,24 +22,23 @@ class BPFileReader : public Engine public: /** - * Constructor for single BP capsule engine, writes in BP format into a - * single - * heap capsule - * @param name unique name given to the engine - * @param accessMode - * @param mpiComm - * @param method - * @param debugMode - * @param hostLanguage + * */ - BPFileReader(ADIOS &adios, const std::string &name, - const std::string accessMode, MPI_Comm mpiComm, - const Method &method); + BPFileReader(IO &io, const std::string &name, const OpenMode openMode, + MPI_Comm mpiComm); virtual ~BPFileReader() = default; - Variable<void> *InquireVariable(const std::string &variableName, - const bool readIn = true); + void Close(const int transportIndex = -1); + +private: + void Init(); ///< calls InitCapsules and InitTransports based on Method, + /// called from constructor + + void InitTransports(); ///< from Transports + + VariableBase *InquireVariableUnknown(const std::string &variableName, + const bool readIn = true); Variable<char> *InquireVariableChar(const std::string &variableName, const bool readIn = true); @@ -109,24 +105,6 @@ public: VariableCompound *InquireVariableCompound(const std::string &variableName, const bool readIn = true); - void Close(const int transportIndex = -1); - -private: - capsule::STLVector - m_Heap; ///< heap capsule, contains data and metadata buffers - // format::BP1Writer m_BP1Writer; ///< format object will provide the - // required - // BP functionality to be applied on m_Buffer and m_Transports - - void Init(); ///< calls InitCapsules and InitTransports based on Method, - /// called from constructor - - void InitTransports(); ///< from Transports - - std::string - GetMdtmParameter(const std::string parameter, - const std::map<std::string, std::string> &mdtmParameters); - template <class T> Variable<T> *InquireVariableCommon(const std::string &name, const bool readIn)