Exemplo n.º 1
0
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();
        }
    }
}
Exemplo n.º 2
0
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;
}