xorp

visitor_test.hh

00001 // -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
00002 // vim:set sts=4 ts=8:
00003 
00004 // Copyright (c) 2001-2009 XORP, Inc.
00005 //
00006 // This program is free software; you can redistribute it and/or modify
00007 // it under the terms of the GNU General Public License, Version 2, June
00008 // 1991 as published by the Free Software Foundation. Redistribution
00009 // and/or modification of this program under the terms of any other
00010 // version of the GNU General Public License is not permitted.
00011 // 
00012 // This program is distributed in the hope that it will be useful, but
00013 // WITHOUT ANY WARRANTY; without even the implied warranty of
00014 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more details,
00015 // see the GNU General Public License, Version 2, a copy of which can be
00016 // found in the XORP LICENSE.gpl file.
00017 // 
00018 // XORP Inc, 2953 Bunker Hill Lane, Suite 204, Santa Clara, CA 95054, USA;
00019 // http://xorp.net
00020 
00021 // $XORP: xorp/policy/visitor_test.hh,v 1.4 2008/10/02 21:58:02 bms Exp $
00022 
00023 #ifndef __POLICY_VISITOR_TEST_HH__
00024 #define __POLICY_VISITOR_TEST_HH__
00025 
00026 #include "configuration.hh"
00027 
00028 class VisitorTest : public Visitor {
00029 public:
00030     VisitorTest(SetMap& sm, PolicyMap& pm, VarMap& vm,
00031         const RATTR& attr, RATTR& mods);
00032     ~VisitorTest();
00033 
00034     bool accepted();
00035 
00036     const Element* visit(NodeUn&);
00037     const Element* visit(NodeBin&);
00038     const Element* visit(NodeVar&);
00039     const Element* visit(NodeAssign&);
00040     const Element* visit(NodeSet&);
00041     const Element* visit(NodeAccept&);
00042     const Element* visit(NodeReject&);
00043     const Element* visit(Term&);
00044     const Element* visit(PolicyStatement&);
00045     const Element* visit(NodeElem&);
00046     const Element* visit(NodeProto&);
00047     const Element* visit(NodeNext&);
00048     const Element* visit(NodeSubr& node);
00049 
00050 private:
00051     typedef set<Element*>   TRASH;
00052     typedef NodeNext::Flow  Flow;
00053     typedef VarRW::Id       Id;
00054     typedef VarMap::Variable    Variable;
00055 
00056     enum Outcome {
00057     DEFAULT,
00058     ACCEPT,
00059     REJECT
00060     };
00061 
00062     void        trash_add(Element*);
00063     const Element*  do_policy_statement(PolicyStatement& ps);
00064     const Element*  do_bin(const Element& left, const Element& right,
00065                const BinOper& op);
00066     const Element&  read(const string& id);
00067     void        write(const string& id, const Element& e);
00068     void        change_protocol(const string& protocol);
00069     Id          var2id(const string& var);
00070     const Variable& var2variable(const string& var);
00071     bool        match(const Element* e);
00072 
00073     SetMap&     _sm;
00074     PolicyMap&      _pm;
00075     VarMap&     _vm;
00076     bool        _finished;
00077     VarRW*      _varrw;
00078     Dispatcher      _disp;
00079     TRASH       _trash;
00080     Outcome     _outcome;
00081     Flow        _flow;
00082     string      _protocol;
00083     string      _current_protocol;
00084     RATTR&      _mod;
00085     ElementFactory  _ef;
00086 };
00087 
00088 #endif // __POLICY_VISITOR_TEST_HH__
 All Classes Namespaces Functions Variables Typedefs Enumerations