Используемые в программе выражения могут содержать в себе ссылки на Сущности (Entities). Первое разделение сущностей: на параметры (в том числе и константы скоростей) и реагенты. Реагенты, точнее, их концентрации – выступают в качестве переменных интегрирования систем дифф.ур-ний, в то время как параметры – это обычно коэффициенты или функции времени в этих уравнениях.
Второе: говоря о реагентах, мы можем иметь в виду функции концентраций от времени, получаемые в процессе интегрирования; либо просто начальные значения концентраций, тогда это обычные параметры схемы.
Эти случаи учитываются при вычислении значений выражений: вводится понятие Контекст вычисления. Объекты этого типа передаются в методы evaluate() классов Expression и ParsedExpression, используются сначала при синтаксическом разборе, а затем и при вычислениях в процессе интегрирования.
struct CalcContext {
double time;
const double* concentrations;
const SchemaInstance* schemaInstance;
};
class ParsedExpression
{
public:
virtual double evaluate(const CalcContext*) const = 0;
...
};
Выражения, не содержащие ссылок на Сущности, вычисляются без Контекста (в качестве аргумента nullptr). Выражения, не ссылающиеся на значения переменных интегрирования, вычисляются в контексте со значением указателя concentrations=nullptr1).