mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-10 07:55:35 +00:00
73 lines
2.1 KiB
C++
73 lines
2.1 KiB
C++
|
/*
|
||
|
* Module.hpp, part of Grid
|
||
|
*
|
||
|
* Copyright (C) 2015 Antonin Portelli
|
||
|
*
|
||
|
* Grid is free software: you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation, either version 3 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* Grid is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with Grid. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
#ifndef Hadrons_Module_hpp_
|
||
|
#define Hadrons_Module_hpp_
|
||
|
|
||
|
#include <Hadrons/Global.hpp>
|
||
|
|
||
|
BEGIN_HADRONS_NAMESPACE
|
||
|
|
||
|
// module registration macro
|
||
|
#define MODULE_REGISTER(mod)\
|
||
|
class mod##Registrar\
|
||
|
{\
|
||
|
public:\
|
||
|
mod##Registrar(void)\
|
||
|
{\
|
||
|
ModuleFactory &modFac = ModuleFactory::getInstance();\
|
||
|
modFac.registerModule(#mod, [&](const std::string &name)\
|
||
|
{\
|
||
|
return std::unique_ptr<mod>(new mod(name));\
|
||
|
});\
|
||
|
}\
|
||
|
};\
|
||
|
static mod##Registrar mod##RegistrarInstance;
|
||
|
|
||
|
/******************************************************************************
|
||
|
* Module *
|
||
|
******************************************************************************/
|
||
|
class Environment;
|
||
|
|
||
|
class Module
|
||
|
{
|
||
|
public:
|
||
|
// constructor
|
||
|
Module(const std::string &name);
|
||
|
// destructor
|
||
|
virtual ~Module(void) = default;
|
||
|
// access
|
||
|
std::string getName(void) const;
|
||
|
// parse parameters
|
||
|
virtual void parseParameters(XmlReader &reader, const std::string &name) = 0;
|
||
|
// dependency relation
|
||
|
virtual std::vector<std::string> getInput(void) = 0;
|
||
|
virtual std::vector<std::string> getOutput(void) = 0;
|
||
|
// memory footprint
|
||
|
virtual double nCreatedProp(void) = 0;
|
||
|
// execution
|
||
|
virtual void operator()(Environment &env) = 0;
|
||
|
private:
|
||
|
std::string name_;
|
||
|
};
|
||
|
|
||
|
END_HADRONS_NAMESPACE
|
||
|
|
||
|
#endif // Hadrons_Module_hpp_
|