00001 // $Id: expression_C-source.html,v 1.1 2001/04/16 17:43:00 dvermeir Exp $ 00002 00003 #include <algorithm> // for equal() 00004 #include "expression.h" 00005 00006 ostream& 00007 operator<<(ostream& os,const Expression& e) { 00008 e.print(os); 00009 return os; 00010 } 00011 00012 /* 00013 bool 00014 PathExpression::eval(const LogRecord& r) const { 00015 const Path& pr(r.path()); 00016 if (pr.size() < path_.size()) 00017 return false; 00018 return equal(path_.begin(), path_.end(), pr.begin()); 00019 } 00020 */ 00021 00022 bool 00023 PathExpression::eval(const LogRecord& r) const { 00024 const string& ps(r.path().str()); 00025 if (ps.size() < path_.str().size()) 00026 return false; 00027 return equal(path_.str().begin(), path_.str().end(), ps.begin()); 00028 } 00029 00030 void 00031 PathExpression::print(ostream& os) const { 00032 os << "path " << path_; 00033 } 00034 00035 bool 00036 DomainExpression::eval(const LogRecord& r) const { 00037 const Domain& d(r.domain()); 00038 if (d.size() < domain_.size()) 00039 return false; 00040 return equal(domain_.begin(), domain_.end(), d.begin()); 00041 } 00042 00043 void 00044 DomainExpression::print(ostream& os) const { 00045 os << "domain " << domain_; 00046 } 00047 00048 bool 00049 DateExpression::eval(const LogRecord& r) const { 00050 const DatePattern& d(r.date()); 00051 if (d.size() < date_.size()) 00052 return false; 00053 return equal(date_.begin(), date_.end(), d.begin()); 00054 }; 00055 00056 void 00057 DateExpression::print(ostream& os) const { 00058 os << "date " << date_; 00059 } 00060 00061 void 00062 NotExpression::print(ostream& os) const{ 00063 os << "exclude " << *exp_ ; 00064 } 00065 00066 AndExpression::~AndExpression() { 00067 for (list<Expression*>::const_iterator i=exps_.begin(); i!=exps_.end(); ++i) 00068 delete *i; 00069 } 00070 00071 void 00072 AndExpression::print(ostream& os) const { 00073 for (list<Expression*>::const_iterator i=exps_.begin(); i!=exps_.end(); ++i) 00074 os << **i << "\n"; 00075 } 00076 00077 bool 00078 AndExpression::eval(const LogRecord& r) const { 00079 for (list<Expression*>::const_iterator i=exps_.begin(); i!=exps_.end(); ++i) 00080 if (!(*i)->eval(r)) 00081 return false; 00082 return true; 00083 }