00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef ABSTRACTCARDIACCELLWITHMODIFIERS_HPP_
00030 #define ABSTRACTCARDIACCELLWITHMODIFIERS_HPP_
00031
00032 #include <boost/shared_ptr.hpp>
00033 #include <map>
00034 #include <string>
00035
00036
00037 #include "AbstractCvodeCell.hpp"
00038 #include "AbstractCardiacCell.hpp"
00039
00040 #include "AbstractModifier.hpp"
00041 #include "AbstractIvpOdeSolver.hpp"
00042 #include "AbstractStimulusFunction.hpp"
00043
00048 template<class CARDIAC_CELL>
00049 class AbstractCardiacCellWithModifiers : public CARDIAC_CELL
00050 {
00051 private:
00053 std::map<std::string, boost::shared_ptr<AbstractModifier>* > mModifiersMap;
00054
00055 protected:
00062 void AddModifier(std::string modifierName, boost::shared_ptr<AbstractModifier>& pModifier);
00063
00064 public:
00076 AbstractCardiacCellWithModifiers(boost::shared_ptr<AbstractIvpOdeSolver> pOdeSolver,
00077 unsigned numberOfStateVariables,
00078 unsigned voltageIndex,
00079 boost::shared_ptr<AbstractStimulusFunction> pIntracellularStimulus);
00080
00087 boost::shared_ptr<AbstractModifier> GetModifier(const std::string& rModifierName);
00088
00096 bool HasModifier(const std::string& rModifierName) const;
00097
00104 void SetModifier(const std::string& rModifierName, boost::shared_ptr<AbstractModifier>& pNewModifier);
00105
00106 };
00107
00108 #endif // ABSTRACTCARDIACCELLWITHMODIFIERS_HPP_