MMO_Expression_::MMO_Expression_ (AST_Expression exp, MMO_ModelData data) : _exp (NULL), _data (data), _str (), _equationIndex (0), _expressionOrder (2) { _ri = newMMO_ReplaceInterval (_data->symbols ()); if (_data->hasAnnotation ()) { _expressionOrder = _data->annotation ()->polyCoeffs (); } AST_Expression e = _ri->foldTraverse (exp); _exp = e; _gen = newGenerateDeps (_data); _deps = _gen->foldTraverse (exp); for (VariableInterval vi = _ri->first (); !_ri->end (); vi = _ri->next ()) { VarInfo v = _data->symbols ()->lookup (vi.name ()); if (v->isState ()) { _deps->insert (vi.index (), DEP_STATE_VECTOR); } else if (v->isAlgebraic ()) { _deps->insert (vi.index (), DEP_ALGEBRAIC_VECTOR_DEF); } else if (v->isDiscrete ()) { _deps->insert (vi.index (), DEP_DISCRETE_VECTOR); } } if (_data->calculateAlgebraics ()) { map<Index, Index> states, discretes; _traverseAlgebraics (_deps, _data->lhs (), _deps, &states, &discretes, Index (), DEP_ALGEBRAIC_DEF, -1); _traverseAlgebraics (_deps, _data->lhs (), _deps, &states, &discretes, Index (), DEP_ALGEBRAIC_VECTOR_DEF, -1); } _printer = newMMO_PrintExp (_data->symbols (), _ri, data->packages ()); }