void findConst(stringSet &l) { stringSet::iterator beg = l.begin(); stringSet::iterator end = l.end(); while (beg != end) { TParam cur = (*--end); if (!cur.isArrayElement()) continue; int dim = cur. getDimension(); TIndex *indexes = cur. getIndexes(); for (int i = 0; i < dim; i++) { if (!indexes[i]. isAtom()) continue; // already proceed before string name = ""; struct expression *cur_index = indexes[i].getIndex(); struct TEvaluableExpression *res = expression2evaluate(*cur_index, name); if (res == NULL) continue; struct calc expr = evaluate(*res); freeEval(res); if (expr. id == 0) // constant index (*end). setIndex(i, TRange(expr. number, expr. number)); //indexes[i]. setRangeList(); } } }
void packUnifySet(stringSet &l) { // Находим все массивы как скалярные переменные и // удаляем все их частные вхождения // также удаляем повторяющиеся элементы stringSet result; stringSet::const_iterator beg = l.begin(); stringSet::const_iterator end = l.end(); while (beg != end) { TParam cur = (*--end); if (!cur.isArrayElement()) { result. push_back(cur); continue; } if (!find(cur, result)) // удаляем повторения элементов result. push_back(cur); } packSet(result); // удаляем частные вхождения l = result; }