#pragma once #include #include #include using std::vector; using std::map; class InnerSubstratesPool { protected: std::vector subConcentrations; // Концентрации субстратов в конкретном организме std::map subNamesMap; // Словарь названий субстратов (значение - номер в массиве) // P.S. Возможно, словари стоит сделать статическими, они ведь для вида одинаковые... std::vector regConcentrations; // Концентрации несубстратных регуляторов в конкретном организме std::map regNamesMap; // Словарь названий несубстратных субстратов (значение - номер в массиве) public: InnerSubstratesPool(){}; InnerSubstratesPool(const vector& _subs, const map& _subNames) : subConcentrations(_subs), subNamesMap(_subNames){} InnerSubstratesPool(const vector& _subs, const map& _subNames, const vector& _regs, const map& _regNames) : subConcentrations(_subs), subNamesMap(_subNames), regConcentrations(_regs), regNamesMap(_regNames){} virtual void utilizeSubstrate(int num, float count) { subConcentrations.at(num) -= count; } virtual void utilizeRegulator(int num, float count) { regConcentrations.at(num) -= count; } virtual void utilizeSubstrate(std::string name, float count) { subConcentrations.at(subNamesMap[name]) -= count; } virtual void utilizeRegulator(std::string name, float count) { subConcentrations.at(regNamesMap[name]) -= count; } virtual void addSubstrate(int num, float count) { subConcentrations.at(num) += count; } virtual void addRegulator(int num, float count) { regConcentrations.at(num) += count; } virtual void addSubstrate(std::string name, float count) { subConcentrations.at(subNamesMap[name]) += count; } virtual void addRegulator(std::string name, float count) { subConcentrations.at(regNamesMap[name]) += count; } };