Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

expression.h

Go to the documentation of this file.
00001 #ifndef EXPRESSION_H
00002 #define EXPRESSION_H
00003 // $Id: expression_h-source.html,v 1.1 2001/04/16 17:43:00 dvermeir Exp $
00004 
00005 #include <list>
00006 
00007 #include "path.h"
00008 #include "domain.h"
00009 #include "datepattern.h"
00010 #include "logrecord.h"
00011 
00012 class Expression {
00013 public:
00014   Expression() {}
00015   virtual ~Expression() {}
00016   virtual bool eval(const LogRecord& r) const = 0;
00017   virtual void print(ostream& os) const = 0;
00018   friend ostream& operator<<(ostream& os,const Expression& e);
00019 };
00020 
00021 class PathExpression: public Expression {
00022 public:
00023   PathExpression(const Path& path): path_(path) {}
00024   bool eval(const LogRecord& r) const;
00025   void print(ostream& os) const;
00026 private:
00027   Path  path_;
00028 };
00029 
00030 class DomainExpression: public Expression {
00031 public:
00032   DomainExpression(const Domain& domain): domain_(domain) {}
00033   bool eval(const LogRecord& r) const;
00034   void print(ostream& os) const;
00035 private:
00036   Domain domain_;
00037 };
00038 
00039 class DateExpression: public Expression {
00040 public:
00041   DateExpression(const DatePattern& date): date_(date) {}
00042   bool eval(const LogRecord& r) const;
00043   void print(ostream& os) const;
00044 private:
00045   DatePattern date_;
00046 };
00047 
00048 class NotExpression: public Expression {
00049 public:
00050   NotExpression(const Expression* e): exp_(e) {}
00051   ~NotExpression() { delete exp_; }
00052   bool eval(const LogRecord& r) const { return (exp_ ? !exp_->eval(r) : false); }
00053   void print(ostream& os) const;
00054 private:
00055   const Expression* exp_;
00056 
00057 };
00058 
00059 class AndExpression: public Expression {
00060 public:
00061   AndExpression() {}
00062   ~AndExpression();
00063   void add(Expression* e) { if (e) exps_.push_back(e); }
00064   bool eval(const LogRecord& r) const;
00065   void print(ostream& os) const;
00066 private:
00067   list<Expression*> exps_;
00068 };
00069 
00070 #endif

httpstats-stage04 [ 7 April, 2001]