/* * Thermostat.hpp * * Created on: Aug 18, 2010 * Author: crueger */ #ifndef THERMOSTAT_HPP_ #define THERMOSTAT_HPP_ // include config.h #ifdef HAVE_CONFIG_H #include #endif class config; #include #include #include #include #include "Atom/AtomSet.hpp" class ThermoStatContainer; class Thermostat { public: Thermostat(); virtual ~Thermostat(); // cannot template this, because we need virtual functions virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms)=0; virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms)=0; virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms)=0; virtual std::string name()=0; virtual std::string writeParams()=0; void addToContainer(ThermoStatContainer *); protected: ThermoStatContainer &getContainer(); private: ThermoStatContainer* container; }; template struct ThermostatTraits; template <> struct ThermostatTraits{ virtual Thermostat *make(class ConfigFileBuffer * const fb)=0; virtual std::string getName(); static const char* name; }; #endif /* THERMOSTAT_HPP_ */