|
xorp
|
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/node_base.hh,v 1.10 2008/10/02 21:57:58 bms Exp $ 00022 00023 #ifndef __POLICY_NODE_BASE_HH__ 00024 #define __POLICY_NODE_BASE_HH__ 00025 00026 #include "visitor.hh" 00027 00036 class Node { 00037 public: 00041 Node(unsigned line) : _line(line) {} 00042 virtual ~Node() {} 00043 00047 unsigned line() const { return _line; } 00048 00055 virtual const Element* accept(Visitor& v) =0; 00056 00062 virtual bool is_protocol_statement() const { return (false); } 00063 00069 virtual bool is_accept_or_reject() const { return (false); } 00070 00071 private: 00072 unsigned _line; 00073 }; 00074 00075 // macro ugliness for visitor implemntation. 00076 #define DEFINE_VISITABLE() \ 00077 const Element* accept(Visitor& visitor) { \ 00078 return visitor.visit(*this); \ 00079 } 00080 00081 #endif // __POLICY_NODE_BASE_HH__