Пример #1
0
Filter* ConstantFilter::combinable(Filter* f, Operator *op)
{
    if (typeid(*f) == typeid(SimpleFilter))
    {
        SimpleFilter *sf = dynamic_cast<SimpleFilter*>(f);
        return sf->combinable(this, op);
    }
    
    // constant filter may have NULL fOp, when it's equalivant to a pure simple filter    
    if  (typeid(ConstantFilter) == typeid(*f) && 
        (!fOp || fOp->data().compare(op->data()) == 0 ))
    {
        ConstantFilter *cf = dynamic_cast<ConstantFilter*>(f);
        if (cf && ( !cf->op() || !fOp || fOp->data().compare(cf->op()->data()) == 0 )
            && fCol->sameColumn(cf->col().get()))
        {
            for (unsigned int i = 0; i < cf->filterList().size(); i++)
                fFilterList.push_back(cf->filterList()[i]);
            fOp.reset(op);
            return this;
        }
    }

    return NULL;       
}