diff options
Diffstat (limited to 'include/astra/Algorithm.h')
-rw-r--r-- | include/astra/Algorithm.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/include/astra/Algorithm.h b/include/astra/Algorithm.h new file mode 100644 index 0000000..d4c73f9 --- /dev/null +++ b/include/astra/Algorithm.h @@ -0,0 +1,135 @@ +/* +----------------------------------------------------------------------- +Copyright 2012 iMinds-Vision Lab, University of Antwerp + +Contact: astra@ua.ac.be +Website: http://astra.ua.ac.be + + +This file is part of the +All Scale Tomographic Reconstruction Antwerp Toolbox ("ASTRA Toolbox"). + +The ASTRA Toolbox 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. + +The ASTRA Toolbox 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 the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>. + +----------------------------------------------------------------------- +$Id$ +*/ + +#ifndef _INC_ASTRA_ALGORITHM +#define _INC_ASTRA_ALGORITHM + +#include <boost/any.hpp> + +#include "Globals.h" +#include "Config.h" + +namespace astra { + +/** + * This class contains the interface for an algorithm implementation. + */ +class _AstraExport CAlgorithm { + +public: + + /** Default constructor, containing no code. + */ + CAlgorithm(); + + /** Destructor. + */ + virtual ~CAlgorithm(); + + /** Initialize the algorithm with a config object. + * + * @param _cfg Configuration Object + * @return initialization successful? + */ + virtual bool initialize(const Config& _cfg) = 0; + + /** Get all information parameters + * + * @return map with all boost::any object + */ + virtual map<string,boost::any> getInformation(); + + /** Get a single piece of information represented as a boost::any + * + * @param _sIdentifier identifier string to specify which piece of information you want + * @return boost::any object + */ + virtual boost::any getInformation(std::string _sIdentifier); + + /** Perform a number of iterations. + * + * @param _iNrIterations amount of iterations to perform. + */ + virtual void run(int _iNrIterations = 0) = 0; + + /** Has this class been initialized? + * + * @return initialized + */ + bool isInitialized(); + + /** get a description of the class + * + * @return description string + */ + virtual std::string description() const; + + /** Signal the algorithm it should abort soon. + * This is intended to be called from a different thread + * while the algorithm is running. There are no guarantees + * on how soon the algorithm will abort. The state of the + * algorithm object will be consistent (so it is safe to delete it + * normally afterwards), but the algorithm's output is undefined. + * + * Note that specific algorithms may give guarantees on their + * state after an abort. Check their documentation for details. + */ + virtual void signalAbort() { m_bShouldAbort = true; } + +protected: + + //< Has this class been initialized? + bool m_bIsInitialized; + + //< If this is set, the algorithm should try to abort as soon as possible. + volatile bool m_bShouldAbort; + +private: + /** + * Private copy constructor to prevent CAlgorithms from being copied. + */ + CAlgorithm(const CAlgorithm&); + + /** + * Private assignment operator to prevent CAlgorithms from being copied. + */ + CAlgorithm& operator=(const CAlgorithm&); + + //< For Config unused argument checking + ConfigCheckData* configCheckData; + friend class ConfigStackCheck<CAlgorithm>; + +}; + +// inline functions +inline std::string CAlgorithm::description() const { return "Algorithm"; }; +inline bool CAlgorithm::isInitialized() { return m_bIsInitialized; } + +} // end namespace + +#endif |