Ejemplo n.º 1
0
 void VisitExpr( const  SymbolicExpr& v) 
         { switch (v.GetOpType()) { 
            case SYMOP_MULTIPLY:
            case SYMOP_PLUS:
                  Default0(); break;
            case SYMOP_MIN:
            case SYMOP_MAX:
                  Default1(v1,v2);
                  if (result == REL_UNKNOWN)
                     result = (index == 1)? SelectCompare(v1,v,GetFunc())(v2)
                                 : Reverse(SelectCompare(v2,v,GetFunc())(v1)); 
                     break;
            default: 
                  assert(false);
           }  
         }
Ejemplo n.º 2
0
 virtual void VisitExpr( const  SymbolicExpr& e2) 
          {  SymOpType t1 = e1.GetOpType(), t2 = e2.GetOpType(); 
             unsigned c1 = e1.NumOfOpds(), c2 = e2.NumOfOpds();
             if (t2 == SYMOP_MULTIPLY || t2 == SYMOP_PLUS )
                    Default0(); 
             else if (t1 == t2) {
                 Matrix<CompareRel> rel(c1,c2,0);
                 ExprTermCompare(e1,e2,rel,GetFunc()); 
                 MatchCompare(rel,c2);
             }
             else if (t1 == SYMOP_MIN && t2 == SYMOP_MAX) {
                size_t le = 0, lt = 0, ge = 0, gt = 0;
                SymbolicExpr::OpdIterator p2 = e2.GetOpdIterator();
                for ( ; !p2.ReachEnd(); ++p2) {
                    CompareRel r = CompareValHelp(v1, e2.Term2Val(p2.Current()),GetFunc());
                    if (CountLE(r)) 
                        ++le; 
                    if (CountGE(r)) 
                        ++ge;
                    if (CountLT(r))
                        ++lt;
                    if (CountGT(r))
                        ++gt;
                } 
                if (gt == e2.NumOfOpds()) 
                     result = REL_GT;
                else if (lt > 0)
                      result = REL_LT;
                else if (ge == e2.NumOfOpds()) 
                     result = REL_GE;
                else if (le > 0)
                      result = REL_LE;
             } 
             else if (t1 == SYMOP_MAX && t2 == SYMOP_MIN) 
                 result = Reverse( SelectCompare(v2, e2, GetFunc())(v1) );
             else
                 assert(false);
          }