xorp

visitor_dep.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-2011 XORP, Inc and Others
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_dep.hh,v 1.3 2008/10/02 21:58:01 bms Exp $
00022 
00023 #ifndef __POLICY_VISITOR_DEP_HH__
00024 #define __POLICY_VISITOR_DEP_HH__
00025 
00026 
00027 
00028 #include "policy/common/policy_exception.hh"
00029 #include "visitor.hh"
00030 #include "set_map.hh"
00031 #include "policy_map.hh"
00032 #include "policy_statement.hh"
00033 #include "node.hh"
00034 
00040 class VisitorDep : public Visitor {
00041 public:
00045     class sem_error : public PolicyException {
00046     public:
00047         sem_error(const char* file, size_t line, const string& init_why = "")   
00048             : PolicyException("sem_error", file, line, init_why) {} 
00049     };
00050 
00054     VisitorDep(SetMap& setmap, PolicyMap& pmap);
00055 
00056     const Element* visit(PolicyStatement& policy);
00057     const Element* visit(Term& term);
00058     const Element* visit(NodeUn& node);
00059     const Element* visit(NodeBin& node);
00060     const Element* visit(NodeAssign& node);
00061     const Element* visit(NodeVar& node);
00062     const Element* visit(NodeSet& node);
00063     const Element* visit(NodeElem& node);
00064     const Element* visit(NodeAccept& node);
00065     const Element* visit(NodeReject& node);
00066     const Element* visit(NodeProto& node);
00067     const Element* visit(NodeNext& node);
00068     const Element* visit(NodeSubr& node);
00069 
00073     const DEPS& sets() const;
00074 
00075 private:
00076     void commit_deps(PolicyStatement& policy);
00077 
00078     SetMap&     _setmap;
00079     PolicyMap&      _pmap;
00080     DEPS        _sets;
00081     DEPS        _policies;
00082 };
00083 
00084 #endif // __POLICY_VISITOR_DEP_HH__
 All Classes Namespaces Functions Variables Typedefs Enumerations