[Xorp-cvs] SF.net SVN: xorp:[11664] trunk/xorp
bms_fbsd at users.sourceforge.net
bms_fbsd at users.sourceforge.net
Thu Dec 3 14:54:21 PST 2009
Revision: 11664
http://xorp.svn.sourceforge.net/xorp/?rev=11664&view=rev
Author: bms_fbsd
Date: 2009-12-03 22:54:21 +0000 (Thu, 03 Dec 2009)
Log Message:
-----------
Third Boost refactoring pass.
Use Boost's polymorphic casts for clearer error checking
of C++ runtime casts. No functional changes.
For more detailed information on what these casts do, look here:
http://www.boost.org/doc/libs/1_41_0/libs/conversion/cast.htm
Discussed on: xorp-hackers@
Modified Paths:
--------------
trunk/xorp/bgp/next_hop_resolver.cc
trunk/xorp/bgp/plumbing.cc
trunk/xorp/cli/cli_node.cc
trunk/xorp/fea/fibconfig_transaction.cc
trunk/xorp/fea/firewall_transaction.cc
trunk/xorp/libfeaclient/ifmgr_cmd_queue.cc
trunk/xorp/libxorp/timer.cc
trunk/xorp/ospf/area_router.cc
trunk/xorp/ospf/auth.cc
trunk/xorp/ospf/external.cc
trunk/xorp/ospf/peer.cc
trunk/xorp/pim/xrl_pim_node.cc
trunk/xorp/rib/rib.cc
trunk/xorp/rip/rip_varrw.cc
trunk/xorp/rip/xrl_port_manager.cc
trunk/xorp/rtrmgr/master_conf_tree.cc
trunk/xorp/rtrmgr/master_conf_tree_node.cc
trunk/xorp/rtrmgr/master_template_tree_node.cc
trunk/xorp/rtrmgr/module_manager.cc
trunk/xorp/rtrmgr/slave_conf_tree_node.cc
Modified: trunk/xorp/bgp/next_hop_resolver.cc
===================================================================
--- trunk/xorp/bgp/next_hop_resolver.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/bgp/next_hop_resolver.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -38,7 +38,10 @@
#include "route_table_decision.hh"
#include "profile_vars.hh"
+#include <boost/cast.hpp>
+using boost::polymorphic_cast;
+
template <class A>
NextHopResolver<A>::NextHopResolver(XrlStdRouter *xrl_router,
EventLoop& eventloop,
@@ -1329,8 +1332,7 @@
//Check that this answer is for the question on the front of the queue
XLOG_ASSERT(!_queue.empty());
RibDeregisterQueueEntry<A> *rd =
- dynamic_cast<RibDeregisterQueueEntry<A> *>(_queue.front());
- XLOG_ASSERT(rd != NULL);
+ polymorphic_cast<RibDeregisterQueueEntry<A> *>(_queue.front());
XLOG_ASSERT(addr == rd->base_addr());
XLOG_ASSERT(prefix_len == rd->prefix_len());
Modified: trunk/xorp/bgp/plumbing.cc
===================================================================
--- trunk/xorp/bgp/plumbing.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/bgp/plumbing.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -38,7 +38,10 @@
#include "profile_vars.hh"
#include "dump_iterators.hh"
+#include <boost/cast.hpp>
+using boost::polymorphic_cast;
+
BGPPlumbing::BGPPlumbing(const Safi safi,
RibIpcHandler* ribhandler,
AggregationHandler* aggrhandler,
@@ -933,8 +936,7 @@
}
debug_msg("type = %d", prevrt->type());
- FilterTable<A> *filter_out = dynamic_cast<FilterTable<A> *>(prevrt);
- XLOG_ASSERT(filter_out != NULL);
+ FilterTable<A> *filter_out = polymorphic_cast<FilterTable<A> *>(prevrt);
filter_out->set_parent(_fanout_table);
_fanout_table->add_next_table(filter_out, peer_handler, rib_in->genid());
@@ -1031,8 +1033,7 @@
_fanout_table->dump_entire_table(filter_out, _master.safi(), ribname);
DumpTable<A> *dump_table =
- dynamic_cast<DumpTable<A> *>(filter_out->parent());
- XLOG_ASSERT(dump_table);
+ polymorphic_cast<DumpTable<A> *>(filter_out->parent());
/*
** It is possible that another peer was in the middle of going
Modified: trunk/xorp/cli/cli_node.cc
===================================================================
--- trunk/xorp/cli/cli_node.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/cli/cli_node.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -435,6 +435,7 @@
int
CliNode::xlog_output(void *obj, xlog_level_t level, const char *msg)
{
+ // XXX: Unchecked runtime cast of void pointer.
CliClient *cli_client = static_cast<CliClient *>(obj);
int ret_value = cli_client->cli_print(msg);
Modified: trunk/xorp/fea/fibconfig_transaction.cc
===================================================================
--- trunk/xorp/fea/fibconfig_transaction.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/fea/fibconfig_transaction.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -27,7 +27,10 @@
#include "fibconfig_transaction.hh"
+#include <boost/cast.hpp>
+using boost::polymorphic_cast;
+
int
FibConfigTransactionManager::set_error(const string& error)
{
@@ -70,8 +73,7 @@
return;
const FibConfigTransactionOperation* fto;
- fto = dynamic_cast<const FibConfigTransactionOperation*>(&op);
- XLOG_ASSERT(fto != NULL);
+ fto = polymorphic_cast<const FibConfigTransactionOperation*>(&op);
//
// Record error and xlog first error only
Modified: trunk/xorp/fea/firewall_transaction.cc
===================================================================
--- trunk/xorp/fea/firewall_transaction.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/fea/firewall_transaction.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -27,6 +27,10 @@
#include "firewall_transaction.hh"
+#include <boost/cast.hpp>
+
+using boost::polymorphic_cast;
+
void
FirewallTransactionManager::pre_commit(uint32_t tid)
{
@@ -42,8 +46,7 @@
return;
const FirewallTransactionOperation* fto;
- fto = dynamic_cast<const FirewallTransactionOperation*>(&op);
- XLOG_ASSERT(fto != NULL);
+ fto = polymorphic_cast<const FirewallTransactionOperation*>(&op);
if (_first_error.empty()) {
_first_error = c_format("Failed executing: \"%s\": %s",
Modified: trunk/xorp/libfeaclient/ifmgr_cmd_queue.cc
===================================================================
--- trunk/xorp/libfeaclient/ifmgr_cmd_queue.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/libfeaclient/ifmgr_cmd_queue.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -31,6 +31,10 @@
#include "ifmgr_cmds.hh"
#include "ifmgr_cmd_queue.hh"
+#include <boost/cast.hpp>
+
+using boost::polymorphic_cast;
+
// ----------------------------------------------------------------------------
// IfMgrCommandSinkBase
@@ -127,8 +131,8 @@
void
IfMgrCommandIfClusteringQueue::push(const Cmd& cmd)
{
- IfMgrIfCommandBase* ifcmd = dynamic_cast<IfMgrIfCommandBase*>(cmd.get());
- XLOG_ASSERT(ifcmd != NULL);
+ IfMgrIfCommandBase* ifcmd =
+ polymorphic_cast<IfMgrIfCommandBase*>(cmd.get());
if (ifcmd->ifname() == _current_ifname) {
_current_cmds.push_back(cmd);
} else {
@@ -164,8 +168,7 @@
if (_current_cmds.empty() == false) {
Cmd& c = _current_cmds.front();
IfMgrIfCommandBase* ifcmd =
- dynamic_cast<IfMgrIfCommandBase*>(c.get());
- XLOG_ASSERT(ifcmd != NULL);
+ polymorphic_cast<IfMgrIfCommandBase*>(c.get());
_current_ifname = ifcmd->ifname();
_current_cmds.pop_front();
}
@@ -186,8 +189,8 @@
{}
bool operator() (IfMgrCommandIfClusteringQueue::Cmd c) {
- IfMgrIfCommandBase* ifcmd = dynamic_cast<IfMgrIfCommandBase*>(c.get());
- XLOG_ASSERT(ifcmd != NULL);
+ IfMgrIfCommandBase* ifcmd =
+ polymorphic_cast<IfMgrIfCommandBase*>(c.get());
return ifcmd->ifname() == _ifname;
}
protected:
@@ -206,8 +209,7 @@
// as new current interface.
Cmd& c = _future_cmds.front();
IfMgrIfCommandBase* ifcmd =
- dynamic_cast<IfMgrIfCommandBase*>(c.get());
- XLOG_ASSERT(ifcmd != NULL);
+ polymorphic_cast<IfMgrIfCommandBase*>(c.get());
_current_ifname = ifcmd->ifname();
back_insert_iterator<CmdList> bi(_current_cmds);
remove_copy_if(_future_cmds.begin(), _future_cmds.end(), bi,
Modified: trunk/xorp/libxorp/timer.cc
===================================================================
--- trunk/xorp/libxorp/timer.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/libxorp/timer.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -25,9 +25,6 @@
//
// Copyright (c) 1999-2000 Massachusetts Institute of Technology
-
-
-
#include "libxorp_module.h"
#include "xorp.h"
@@ -35,6 +32,8 @@
#include "timer.hh"
#include "clock.hh"
+#include <boost/cast.hpp>
+
// Implementation Notes:
//
// Event scheduling happens through the TimerList. The TimerList is
@@ -408,7 +407,7 @@
tardiness.str().c_str());
}
- TimerNode *t = static_cast<TimerNode *>(n->object);
+ TimerNode *t = boost::polymorphic_downcast<TimerNode *>(n->object);
heap->pop();
// _hook() requires a XorpTimer as first argument, we have
// only a timernode, so we have to create a temporary
Modified: trunk/xorp/ospf/area_router.cc
===================================================================
--- trunk/xorp/ospf/area_router.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/ospf/area_router.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -41,6 +41,8 @@
#include <set>
#include <deque>
+#include <boost/cast.hpp>
+
#include "libproto/spt.hh"
#include "ospf.hh"
@@ -48,6 +50,8 @@
#include "vertex.hh"
#include "area_router.hh"
+using boost::polymorphic_cast;
+
template <typename A>
AreaRouter<A>::AreaRouter(Ospf<A>& ospf, OspfTypes::AreaID area,
OspfTypes::AreaType area_type)
@@ -370,8 +374,7 @@
{
Vertex node = rc.node();
Lsa::LsaRef lsar = node.get_lsa();
- RouterLsa *rlsa = dynamic_cast<RouterLsa *>(lsar.get());
- XLOG_ASSERT(rlsa);
+ RouterLsa *rlsa = polymorphic_cast<RouterLsa *>(lsar.get());
OspfTypes::RouterID rid = rlsa->get_header().get_link_state_id();
// If this router ID is in the tmp set then it is already up, just
@@ -431,8 +434,7 @@
list<Lsa::LsaRef>::iterator l = lsars.begin();
XLOG_ASSERT(l != lsars.end());
Lsa::LsaRef lsar = *l++;
- RouterLsa *rlsa = dynamic_cast<RouterLsa *>(lsar.get());
- XLOG_ASSERT(rlsa);
+ RouterLsa *rlsa = polymorphic_cast<RouterLsa *>(lsar.get());
OspfTypes::RouterID rid = rlsa->get_header().get_advertising_router();
// If this router ID is in the tmp set then it is already up, just
@@ -505,6 +507,8 @@
"Find interface address \nsrc:\n%s\ndst:\n%s\n",
cstring(*src), cstring(*dst));
+ // XXX: Candidates for polymorphic_cast<T>, but used within
+ // logic below.
RouterLsa *rlsa = dynamic_cast<RouterLsa *>(src.get());
NetworkLsa *nlsa = dynamic_cast<NetworkLsa *>(src.get());
@@ -621,8 +625,7 @@
cstring(*lsa));
return false;
}
- LinkLsa *llsa = dynamic_cast<LinkLsa *>(lsa.get());
- XLOG_ASSERT(llsa);
+ LinkLsa *llsa = polymorphic_cast<LinkLsa *>(lsa.get());
interface = llsa->get_link_local_address();
return true;
}
@@ -1427,8 +1430,7 @@
Lsa::LsaRef
AreaRouter<A>::external_generate_type7(Lsa::LsaRef lsar, bool& indb)
{
- ASExternalLsa *aselsa = dynamic_cast<ASExternalLsa *>(lsar.get());
- XLOG_ASSERT(aselsa);
+ ASExternalLsa *aselsa = polymorphic_cast<ASExternalLsa *>(lsar.get());
OspfTypes::Version version = _ospf.get_version();
Type7Lsa *type7= new Type7Lsa(version);
@@ -1487,8 +1489,7 @@
Lsa::LsaRef
AreaRouter<A>::external_generate_external(Lsa::LsaRef lsar)
{
- Type7Lsa *type7 = dynamic_cast<Type7Lsa *>(lsar.get());
- XLOG_ASSERT(type7);
+ Type7Lsa *type7 = polymorphic_cast<Type7Lsa *>(lsar.get());
OspfTypes::Version version = _ospf.get_version();
ASExternalLsa *aselsa= new ASExternalLsa(version);
@@ -1816,8 +1817,7 @@
return false;
}
- NetworkLsa *nlsa = dynamic_cast<NetworkLsa *>(_db[index].get());
- XLOG_ASSERT(nlsa);
+ NetworkLsa *nlsa = polymorphic_cast<NetworkLsa *>(_db[index].get());
// If routers is empty this is a refresh.
if (!routers.empty()) {
@@ -1900,8 +1900,7 @@
AreaRouter<A>::refresh_network_lsa(OspfTypes::PeerID peerid, Lsa::LsaRef lsar,
bool timer)
{
- NetworkLsa *nlsa = dynamic_cast<NetworkLsa *>(lsar.get());
- XLOG_ASSERT(nlsa);
+ NetworkLsa *nlsa = polymorphic_cast<NetworkLsa *>(lsar.get());
XLOG_ASSERT(nlsa->valid());
uint32_t network_mask = 0;
@@ -2127,8 +2126,7 @@
}
IntraAreaPrefixLsa *iaplsa =
- dynamic_cast<IntraAreaPrefixLsa *>(_db[index].get());
- XLOG_ASSERT(iaplsa);
+ polymorphic_cast<IntraAreaPrefixLsa *>(_db[index].get());
// If attached_routers is empty this is a refresh.
if (!attached_routers.empty()) {
@@ -3504,8 +3502,7 @@
Lsa::LsaRef lsar = _db[index];
IntraAreaPrefixLsa *iaplsa =
- dynamic_cast<IntraAreaPrefixLsa *>(lsar.get());
- XLOG_ASSERT(iaplsa);
+ polymorphic_cast<IntraAreaPrefixLsa *>(lsar.get());
list<IPv6Prefix>& nprefixes = iaplsa->get_prefixes();
nprefixes.insert(nprefixes.begin(), prefixes.begin(), prefixes.end());
@@ -3523,8 +3520,7 @@
// the newly computed one then update the old one and publish.
Lsa::LsaRef lsar = _db[index];
IntraAreaPrefixLsa *iaplsa =
- dynamic_cast<IntraAreaPrefixLsa *>(lsar.get());
- XLOG_ASSERT(iaplsa);
+ polymorphic_cast<IntraAreaPrefixLsa *>(lsar.get());
list<IPv6Prefix>& oprefixes = iaplsa->get_prefixes();
list<IPv6Prefix>::iterator j, k;
@@ -4043,8 +4039,7 @@
route_entry.set_area_border_router(rlsa->get_b_bit());
route_entry.set_as_boundary_router(rlsa->get_e_bit());
} else {
- nlsa = dynamic_cast<NetworkLsa *>(lsar.get());
- XLOG_ASSERT(nlsa);
+ nlsa = polymorphic_cast<NetworkLsa *>(lsar.get());
// route_entry.set_router_id(nlsa->get_header().
// get_advertising_router());
route_entry.set_address(nlsa->get_header().get_link_state_id());
@@ -4345,8 +4340,7 @@
// route_entry);
}
} else {
- NetworkLsa *nlsa = dynamic_cast<NetworkLsa *>(lsar.get());
- XLOG_ASSERT(nlsa);
+ NetworkLsa *nlsa = polymorphic_cast<NetworkLsa *>(lsar.get());
const list<IntraAreaPrefixLsa *>& lsai =
lsa_temp_store.get_intra_area_prefix_lsas(node.get_nodeid());
if (!lsai.empty()) {
Modified: trunk/xorp/ospf/auth.cc
===================================================================
--- trunk/xorp/ospf/auth.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/ospf/auth.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -36,6 +36,8 @@
#include "libxorp/eventloop.hh"
#include "libproto/packet.hh"
+#include <boost/cast.hpp>
+
#include "ospf.hh"
#include "auth.hh"
@@ -801,8 +803,8 @@
if (plaintext_ah == NULL) {
set_method(PlaintextAuthHandler::auth_type_name());
}
- plaintext_ah = dynamic_cast<PlaintextAuthHandler*>(_auth_handler);
- XLOG_ASSERT(plaintext_ah != NULL);
+ plaintext_ah =
+ boost::polymorphic_cast<PlaintextAuthHandler*>(_auth_handler);
plaintext_ah->set_key(password);
error_msg = "";
Modified: trunk/xorp/ospf/external.cc
===================================================================
--- trunk/xorp/ospf/external.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/ospf/external.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -38,6 +38,8 @@
#include <list>
#include <set>
+#include <boost/cast.hpp>
+
#include "libproto/spt.hh"
#include "ospf.hh"
@@ -47,6 +49,8 @@
#include "external.hh"
#include "policy_varrw.hh"
+using boost::polymorphic_cast;
+
template <typename A>
External<A>::External(Ospf<A>& ospf,
map<OspfTypes::AreaID, AreaRouter<A> *>& areas)
@@ -126,11 +130,9 @@
Lsa::LsaRef lsar_in_db = *i;
XLOG_ASSERT(lsar_in_db->get_self_originating());
- ASExternalLsa *aselsa = dynamic_cast<ASExternalLsa *>(lsar.get());
- XLOG_ASSERT(aselsa);
+ ASExternalLsa *aselsa = polymorphic_cast<ASExternalLsa *>(lsar.get());
ASExternalLsa *aselsa_in_db =
- dynamic_cast<ASExternalLsa *>(lsar_in_db.get());
- XLOG_ASSERT(aselsa_in_db);
+ polymorphic_cast<ASExternalLsa *>(lsar_in_db.get());
if (aselsa->get_network_mask() == aselsa_in_db->get_network_mask())
return;
@@ -181,8 +183,7 @@
Lsa::LsaRef lsar_in_db = *i;
XLOG_ASSERT(lsar_in_db->get_self_originating());
ASExternalLsa *aselsa_in_db =
- dynamic_cast<ASExternalLsa *>(lsar_in_db.get());
- XLOG_ASSERT(aselsa_in_db);
+ polymorphic_cast<ASExternalLsa *>(lsar_in_db.get());
IPv4 mask_in_db = IPv4(htonl(aselsa_in_db->get_network_mask()));
// If the mask/prefix lengths match then the LSA has been found.
if (mask_in_db.mask_len() == net.prefix_len())
@@ -455,8 +456,7 @@
RouteEntry<A> rte;
list<Lsa::LsaRef>::iterator i;
for (i = _suppress_temp.begin(); i != _suppress_temp.end(); i++) {
- ASExternalLsa *aselsa = dynamic_cast<ASExternalLsa *>((*i).get());
- XLOG_ASSERT(aselsa);
+ ASExternalLsa *aselsa = polymorphic_cast<ASExternalLsa *>((*i).get());
Lsa::LsaRef olsar = aselsa->get_suppressed_lsa();
aselsa->release_suppressed_lsa();
if (!rt.lookup_entry_by_advertising_router(area,
@@ -523,8 +523,7 @@
{
XLOG_ASSERT(olsar->get_self_originating());
- ASExternalLsa *olsa = dynamic_cast<ASExternalLsa *>(olsar.get());
- XLOG_ASSERT(olsa);
+ ASExternalLsa *olsa = polymorphic_cast<ASExternalLsa *>(olsar.get());
OspfTypes::Version version = _ospf.version();
ASExternalLsa *nlsa = new ASExternalLsa(version);
@@ -641,8 +640,7 @@
void
External<A>::suppress_self(Lsa::LsaRef lsar)
{
- ASExternalLsa *aselsa = dynamic_cast<ASExternalLsa *>(lsar.get());
- XLOG_ASSERT(aselsa);
+ ASExternalLsa *aselsa = polymorphic_cast<ASExternalLsa *>(lsar.get());
// This may be a refresh of previously announce AS-external-LSA.
bool suppressed = false;
@@ -689,8 +687,7 @@
XLOG_ASSERT(lsar->external());
XLOG_ASSERT(!lsar->get_self_originating());
- ASExternalLsa *aselsa = dynamic_cast<ASExternalLsa *>(lsar.get());
- XLOG_ASSERT(aselsa);
+ ASExternalLsa *aselsa = polymorphic_cast<ASExternalLsa *>(lsar.get());
OspfTypes::Version version = _ospf.version();
@@ -713,8 +710,7 @@
if (0 == olsar.get())
return false;
- ASExternalLsa *olsa = dynamic_cast<ASExternalLsa *>(olsar.get());
- XLOG_ASSERT(olsa);
+ ASExternalLsa *olsa = polymorphic_cast<ASExternalLsa *>(olsar.get());
switch(version) {
case OspfTypes::V2:
Modified: trunk/xorp/ospf/peer.cc
===================================================================
--- trunk/xorp/ospf/peer.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/ospf/peer.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -1221,6 +1221,7 @@
LinkStateUpdatePacket *lsup;
LinkStateAcknowledgementPacket *lsap;
+ // XXX: Candidate for a packet_type<T>() template function.
if (0 != (hello = dynamic_cast<HelloPacket *>(packet))) {
return process_hello_packet(dst, src, hello);
} else if(0 != (dd = dynamic_cast<DataDescriptionPacket *>(packet))) {
Modified: trunk/xorp/pim/xrl_pim_node.cc
===================================================================
--- trunk/xorp/pim/xrl_pim_node.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/pim/xrl_pim_node.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -34,6 +34,10 @@
#include "pim_vif.hh"
#include "xrl_pim_node.hh"
+#include <boost/cast.hpp>
+
+using boost::polymorphic_cast;
+
const TimeVal XrlPimNode::RETRY_TIMEVAL = TimeVal(1, 0);
//
@@ -411,8 +415,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
RegisterUnregisterInterest* entry;
- entry = dynamic_cast<RegisterUnregisterInterest*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<RegisterUnregisterInterest*>(xrl_task_base);
if (entry->is_register()) {
// Register interest
@@ -446,8 +449,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
RegisterUnregisterInterest* entry;
- entry = dynamic_cast<RegisterUnregisterInterest*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<RegisterUnregisterInterest*>(xrl_task_base);
switch (xrl_error.error_code()) {
case OKAY:
@@ -1028,8 +1030,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
RegisterUnregisterReceiver* entry;
- entry = dynamic_cast<RegisterUnregisterReceiver*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<RegisterUnregisterReceiver*>(xrl_task_base);
//
// Check whether we have already registered with the FEA
@@ -1117,8 +1118,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
RegisterUnregisterReceiver* entry;
- entry = dynamic_cast<RegisterUnregisterReceiver*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<RegisterUnregisterReceiver*>(xrl_task_base);
switch (xrl_error.error_code()) {
case OKAY:
@@ -1222,8 +1222,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
RegisterUnregisterProtocol* entry;
- entry = dynamic_cast<RegisterUnregisterProtocol*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<RegisterUnregisterProtocol*>(xrl_task_base);
//
// Check whether we have already registered with the MFEA
@@ -1307,8 +1306,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
RegisterUnregisterProtocol* entry;
- entry = dynamic_cast<RegisterUnregisterProtocol*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<RegisterUnregisterProtocol*>(xrl_task_base);
switch (xrl_error.error_code()) {
case OKAY:
@@ -1412,8 +1410,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
JoinLeaveMulticastGroup* entry;
- entry = dynamic_cast<JoinLeaveMulticastGroup*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<JoinLeaveMulticastGroup*>(xrl_task_base);
//
// Check whether we have already registered with the FEA
@@ -1502,8 +1499,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
JoinLeaveMulticastGroup* entry;
- entry = dynamic_cast<JoinLeaveMulticastGroup*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<JoinLeaveMulticastGroup*>(xrl_task_base);
switch (xrl_error.error_code()) {
case OKAY:
@@ -1603,8 +1599,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
AddDeleteMfc* entry;
- entry = dynamic_cast<AddDeleteMfc*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<AddDeleteMfc*>(xrl_task_base);
size_t max_vifs_oiflist = entry->olist().size();
const IPvX& source_addr = entry->source_addr();
@@ -1705,8 +1700,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
AddDeleteMfc* entry;
- entry = dynamic_cast<AddDeleteMfc*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<AddDeleteMfc*>(xrl_task_base);
switch (xrl_error.error_code()) {
case OKAY:
@@ -1843,8 +1837,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
AddDeleteDataflowMonitor* entry;
- entry = dynamic_cast<AddDeleteDataflowMonitor*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<AddDeleteDataflowMonitor*>(xrl_task_base);
//
// Check whether we have already registered with the MFEA
@@ -1981,8 +1974,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
AddDeleteDataflowMonitor* entry;
- entry = dynamic_cast<AddDeleteDataflowMonitor*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<AddDeleteDataflowMonitor*>(xrl_task_base);
switch (xrl_error.error_code()) {
case OKAY:
@@ -2350,8 +2342,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
SendProtocolMessage* entry;
- entry = dynamic_cast<SendProtocolMessage*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<SendProtocolMessage*>(xrl_task_base);
//
// Check whether we have already registered with the FEA
@@ -2432,8 +2423,7 @@
XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();
SendProtocolMessage* entry;
- entry = dynamic_cast<SendProtocolMessage*>(xrl_task_base);
- XLOG_ASSERT(entry != NULL);
+ entry = polymorphic_cast<SendProtocolMessage*>(xrl_task_base);
switch (xrl_error.error_code()) {
case OKAY:
Modified: trunk/xorp/rib/rib.cc
===================================================================
--- trunk/xorp/rib/rib.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/rib/rib.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -31,7 +31,9 @@
#include "rib_manager.hh"
#include "rib.hh"
+#include <boost/cast.hpp>
+
// ----------------------------------------------------------------------------
// Inline table utility methods
@@ -45,6 +47,7 @@
const string& _n;
};
+// XXX: Unused template function.
template <typename A, typename T>
struct table_has_name_and_type {
table_has_name_and_type(const string& name) : _n(name) {}
@@ -134,6 +137,7 @@
{
map<string, uint32_t>::iterator mi = _admin_distances.find(protocol_name);
if (mi != _admin_distances.end()) {
+ // XXX: Candidate for a table_has_type() template function.
OriginTable<A>* ot =
dynamic_cast<OriginTable<A>* >(find_table(protocol_name));
if (NULL != ot) {
@@ -772,6 +776,7 @@
}
}
+ // XXX: Candidate for a table_has_type() template function.
OriginTable<A>* ot = dynamic_cast<OriginTable<A>* >(rt);
if (ot == NULL) {
if (_errors_are_fatal) {
@@ -885,6 +890,7 @@
if (NULL == rt)
return XORP_ERROR; // Table does not exist
+ // XXX: Candidate for a table_has_type() template function.
OriginTable<A>* ot = dynamic_cast<OriginTable<A>* >(rt);
if (NULL == ot)
return XORP_ERROR; // Table is not an origin table
@@ -909,6 +915,7 @@
if (NULL == rt)
return XORP_ERROR; // Table does not exist
+ // XXX: Candidate for a table_has_type() template function.
OriginTable<A>* ot = dynamic_cast<OriginTable<A>* >(rt);
if (NULL == ot)
return XORP_ERROR; // Table is not an origin table
@@ -1053,7 +1060,8 @@
return A::ZERO();
#else
// Default: Assume the route points to a resolved IPNextHop.
- IPNextHop<A>* route_nexthop = static_cast<IPNextHop<A>* >(re->nexthop());
+ IPNextHop<A>* route_nexthop =
+ boost::polymorphic_downcast<IPNextHop<A>* >(re->nexthop());
return route_nexthop->addr();
#endif
}
@@ -1085,6 +1093,8 @@
RedistTable<A>*
RIB<A>::protocol_redist_table(const string& protocol)
{
+ // XXX: Candidate for a polymorphic_cast, but our callers check
+ // for the 0 return value.
RouteTable<A>* rt = find_table(redist_tablename(protocol));
if (rt != NULL) {
return dynamic_cast<RedistTable<A>*>(rt);
@@ -1232,6 +1242,7 @@
// Check if table exists and check type if so
RouteTable<A>* rt = find_table(tablename);
if (rt != NULL) {
+ // XXX: Candidate for a table_has_type() template function.
OriginTable<A>* ot = dynamic_cast<OriginTable<A>* >(rt);
if (ot == NULL) {
XLOG_ERROR("add_origin_table: table \"%s\" already exists, but is "
@@ -1264,7 +1275,10 @@
return XORP_ERROR;
}
- OriginTable<A>* new_table = static_cast<OriginTable<A>* >(find_table(tablename));
+ // XXX: Unchecked upcast from RouteTable to OriginTable.
+ OriginTable<A>* new_table =
+ boost::polymorphic_downcast<OriginTable<A>* >(find_table(tablename));
+
// XXX: the table was created by new_origin_table() above, so it must exist
XLOG_ASSERT(new_table != NULL);
if (_final_table == new_table) {
@@ -1305,6 +1319,7 @@
continue;
}
+ // XXX: Candidate for a table_has_type() template function.
OriginTable<A>* ot = dynamic_cast<OriginTable<A>* >(current);
if (ot != NULL) {
if (ot->protocol_type() == IGP) {
@@ -1459,6 +1474,7 @@
const string& target_class,
const string& target_instance)
{
+ // XXX: Candidate for a table_has_type() template function.
OriginTable<A>* ot = dynamic_cast<OriginTable<A>* >(find_table(tablename));
if (NULL == ot)
return XORP_ERROR;
@@ -1596,8 +1612,8 @@
RouteTable<A>* rt = find_table(PolicyConnectedTable<A>::table_name);
XLOG_ASSERT(rt != NULL);
- PolicyConnectedTable<A>* pct = dynamic_cast<PolicyConnectedTable<A>*>(rt);
- XLOG_ASSERT(pct != NULL);
+ PolicyConnectedTable<A>* pct =
+ boost::polymorphic_cast<PolicyConnectedTable<A>*>(rt);
pct->push_routes();
}
Modified: trunk/xorp/rip/rip_varrw.cc
===================================================================
--- trunk/xorp/rip/rip_varrw.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/rip/rip_varrw.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -26,6 +26,8 @@
#include "policy/common/policy_utils.hh"
#include "rip_varrw.hh"
+#include <boost/cast.hpp>
+
template <class A>
RIPVarRW<A>::RIPVarRW(RouteEntry<A>& route)
: _route(route)
@@ -44,6 +46,7 @@
// XXX which tag wins?
Element* element = _route.policytags().element_tag();
+
ElemU32* e = dynamic_cast<ElemU32*>(element);
if (e != NULL && e->val())
_route.set_tag(e->val());
@@ -74,21 +77,17 @@
if (write_nexthop(id, e))
return;
- const ElemU32* u32 = NULL;
+ const ElemU32* u32 = 0;
if (e.type() == ElemU32::id) {
- u32 = dynamic_cast<const ElemU32*>(&e);
- XLOG_ASSERT(u32 != NULL);
+ u32 = boost::polymorphic_cast<const ElemU32*>(&e);
}
if (id == VAR_METRIC) {
- XLOG_ASSERT(u32 != NULL);
-
_route.set_cost(u32->val());
return;
}
- if (id == VAR_TAG) {
- XLOG_ASSERT(u32 != NULL);
+ if (id == VAR_TAG) {
_route.set_tag(u32->val());
_route.policytags().set_tag(e);
return;
@@ -102,10 +101,9 @@
RIPVarRW<IPv4>::write_nexthop(const Id& id, const Element& e)
{
if (id == VAR_NEXTHOP4 && e.type() == ElemIPv4NextHop::id) {
- const ElemIPv4NextHop* v4 = dynamic_cast<const ElemIPv4NextHop*>(&e);
+ const ElemIPv4NextHop* v4 =
+ boost::polymorphic_cast<const ElemIPv4NextHop*>(&e);
- XLOG_ASSERT(v4 != NULL);
-
IPv4 nh(v4->val());
_route.set_nexthop(nh);
@@ -134,10 +132,9 @@
RIPVarRW<IPv6>::write_nexthop(const Id& id, const Element& e)
{
if (id == VAR_NEXTHOP6 && e.type() == ElemIPv6NextHop::id) {
- const ElemIPv6NextHop* v6 = dynamic_cast<const ElemIPv6NextHop*>(&e);
+ const ElemIPv6NextHop* v6 =
+ boost::polymorphic_cast<const ElemIPv6NextHop*>(&e);
- XLOG_ASSERT(v6 != NULL);
-
IPv6 nh(v6->val());
_route.set_nexthop(nh);
Modified: trunk/xorp/rip/xrl_port_manager.cc
===================================================================
--- trunk/xorp/rip/xrl_port_manager.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/rip/xrl_port_manager.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -548,6 +548,7 @@
return;
}
Port<A>* p = (*pi);
+ // XXX: Downcast result used as a loop control variable.
xio = dynamic_cast<XrlPortIO<A>*>(p->io_handler());
pi++;
}
Modified: trunk/xorp/rtrmgr/master_conf_tree.cc
===================================================================
--- trunk/xorp/rtrmgr/master_conf_tree.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/rtrmgr/master_conf_tree.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -275,6 +275,8 @@
uid_t user_id, bool verbose)
{
MasterConfigTreeNode *ctn, *parent;
+
+ // BOOST: Conditional downcast means polymorphic casts can't be used.
parent = dynamic_cast<MasterConfigTreeNode *>(parent_node);
if (parent_node != NULL)
XLOG_ASSERT(parent != NULL);
Modified: trunk/xorp/rtrmgr/master_conf_tree_node.cc
===================================================================
--- trunk/xorp/rtrmgr/master_conf_tree_node.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/rtrmgr/master_conf_tree_node.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -26,6 +26,8 @@
#include "libxorp/xlog.h"
#include "libxorp/debug.h"
+#include <boost/cast.hpp>
+
#include "command_tree.hh"
#include "master_conf_tree_node.hh"
#include "module_command.hh"
@@ -79,9 +81,10 @@
{
UNUSED(clientid);
MasterConfigTreeNode *new_node, *parent;
- parent = dynamic_cast<MasterConfigTreeNode *>(parent_node);
// sanity check - all nodes in this tree should be Master nodes
+ // BOOST: Conditional downcast means polymorphic casts can't be used.
+ parent = dynamic_cast<MasterConfigTreeNode *>(parent_node);
if (parent_node != NULL)
XLOG_ASSERT(parent != NULL);
@@ -96,8 +99,7 @@
const MasterConfigTreeNode *orig;
// sanity check - all nodes in this tree should be Master nodes
- orig = dynamic_cast<const MasterConfigTreeNode *>(&ctn);
- XLOG_ASSERT(orig != NULL);
+ orig = boost::polymorphic_cast<const MasterConfigTreeNode *>(&ctn);
new_node = new MasterConfigTreeNode(*orig);
return new_node;
@@ -449,8 +451,8 @@
const AllowCommand* allow_cmd;
debug_msg("found ALLOW command: %s\n",
cmd->str().c_str());
- allow_cmd = dynamic_cast<const AllowCommand*>(base_cmd);
- XLOG_ASSERT(allow_cmd != NULL);
+ allow_cmd =
+ boost::polymorphic_cast<const AllowCommand*>(base_cmd);
if (allow_cmd->verify_variables(*this, error_msg)
!= true) {
//
@@ -488,8 +490,8 @@
const AllowCommand* allow_cmd;
debug_msg("found ALLOW command: %s\n",
cmd->str().c_str());
- allow_cmd = dynamic_cast<const AllowCommand*>(base_cmd);
- XLOG_ASSERT(allow_cmd != NULL);
+ allow_cmd =
+ boost::polymorphic_cast<const AllowCommand*>(base_cmd);
if (allow_cmd->verify_variables(*this, error_msg)
!= true) {
error_msg = c_format("Bad operator for \"%s\": %s; ",
Modified: trunk/xorp/rtrmgr/master_template_tree_node.cc
===================================================================
--- trunk/xorp/rtrmgr/master_template_tree_node.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/rtrmgr/master_template_tree_node.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -37,7 +37,10 @@
#include "master_template_tree_node.hh"
#include "util.hh"
+#include <boost/cast.hpp>
+using boost::polymorphic_cast;
+
void
MasterTemplateTreeNode::add_cmd(const string& cmd, TemplateTree& tt)
throw (ParseError)
@@ -83,8 +86,8 @@
iter = _cmd_map.find("%modinfo");
XLOG_ASSERT(iter != _cmd_map.end());
command = iter->second;
- ModuleCommand* module_command = dynamic_cast<ModuleCommand*>(command);
- XLOG_ASSERT(module_command != NULL);
+ ModuleCommand* module_command =
+ polymorphic_cast<ModuleCommand*>(command);
module_command->add_action(action_list, xrldb);
} else if ((cmd == "%create")
|| (cmd == "%activate")
@@ -116,8 +119,8 @@
cmd_iter = _cmd_map.find("%modinfo");
if (cmd_iter != _cmd_map.end()) {
BaseCommand* command = cmd_iter->second;
- ModuleCommand* module_command = dynamic_cast<ModuleCommand*>(command);
- XLOG_ASSERT(module_command != NULL);
+ ModuleCommand* module_command =
+ polymorphic_cast<ModuleCommand*>(command);
if (module_command->expand_actions(error_msg) != true)
return (false);
}
@@ -140,7 +143,7 @@
list<TemplateTreeNode*>::iterator iter2;
for (iter2 = _children.begin(); iter2 != _children.end(); ++iter2) {
MasterTemplateTreeNode* mttn;
- mttn = static_cast<MasterTemplateTreeNode*>(*iter2);
+ mttn = polymorphic_cast<MasterTemplateTreeNode*>(*iter2);
if (mttn->expand_master_template_tree(error_msg) != true)
return false;
}
@@ -160,8 +163,7 @@
if (cmd_iter != _cmd_map.end()) {
const BaseCommand* command = cmd_iter->second;
const ModuleCommand* module_command;
- module_command = dynamic_cast<const ModuleCommand*>(command);
- XLOG_ASSERT(module_command != NULL);
+ module_command = polymorphic_cast<const ModuleCommand*>(command);
if (module_command->check_referred_variables(error_msg) != true)
return (false);
}
@@ -172,7 +174,7 @@
list<TemplateTreeNode*>::const_iterator iter2;
for (iter2 = _children.begin(); iter2 != _children.end(); ++iter2) {
const MasterTemplateTreeNode* mttn;
- mttn = static_cast<const MasterTemplateTreeNode*>(*iter2);
+ mttn = polymorphic_cast<MasterTemplateTreeNode*>(*iter2);
if (mttn->check_master_template_tree(error_msg) != true)
return false;
}
Modified: trunk/xorp/rtrmgr/module_manager.cc
===================================================================
--- trunk/xorp/rtrmgr/module_manager.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/rtrmgr/module_manager.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -18,7 +18,10 @@
// http://xorp.net
+#include <boost/cast.hpp>
+using boost::polymorphic_cast;
+
#include "rtrmgr_module.h"
#include "libxorp/xorp.h"
@@ -439,8 +442,7 @@
{
Module* module;
- module = dynamic_cast<Module *>(find_module(module_name));
- XLOG_ASSERT(module != NULL);
+ module = polymorphic_cast<Module *>(find_module(module_name));
return (module->execute(do_exec, is_verification, cb));
}
@@ -451,8 +453,7 @@
{
Module* module;
- module = dynamic_cast<Module *>(find_module(module_name));
- XLOG_ASSERT(module != NULL);
+ module = polymorphic_cast<Module *>(find_module(module_name));
module->terminate(cb);
return XORP_OK;
@@ -487,8 +488,7 @@
map<string, GenericModule *>::iterator iter;
for (iter = _modules.begin(); iter != _modules.end(); ++iter) {
- Module *module = dynamic_cast<Module *>(iter->second);
- XLOG_ASSERT(module != NULL);
+ Module *module = polymorphic_cast<Module *>(iter->second);
module->terminate(callback(this, &ModuleManager::module_shutdown_cb,
module->name()));
}
@@ -546,8 +546,7 @@
map<string, GenericModule *>::const_iterator iter;
for (iter = _modules.begin(); iter != _modules.end(); ++iter) {
- Module* module = dynamic_cast<Module *>(iter->second);
- XLOG_ASSERT(module != NULL);
+ Module* module = polymorphic_cast<Module *>(iter->second);
if (module->expath() != expath)
continue;
switch (module->status()) {
Modified: trunk/xorp/rtrmgr/slave_conf_tree_node.cc
===================================================================
--- trunk/xorp/rtrmgr/slave_conf_tree_node.cc 2009-12-03 22:42:23 UTC (rev 11663)
+++ trunk/xorp/rtrmgr/slave_conf_tree_node.cc 2009-12-03 22:54:21 UTC (rev 11664)
@@ -33,7 +33,10 @@
#include "template_tree_node.hh"
#include "util.hh"
+#include <boost/cast.hpp>
+using boost::polymorphic_cast;
+
extern int booterror(const char *s);
SlaveConfigTreeNode::SlaveConfigTreeNode(bool verbose)
@@ -65,9 +68,11 @@
bool verbose)
{
SlaveConfigTreeNode *new_node, *parent;
- parent = dynamic_cast<SlaveConfigTreeNode *>(parent_node);
// sanity check - all nodes in this tree should be Slave nodes
+ // BOOST: This is a conditional downcast, so polymorphic casts
+ // can't be applied.
+ parent = dynamic_cast<SlaveConfigTreeNode *>(parent_node);
if (parent_node != NULL)
XLOG_ASSERT(parent != NULL);
@@ -85,8 +90,7 @@
debug_msg("SlaveConfigTreeNode::create_node\n");
// sanity check - all nodes in this tree should be Slave nodes
- orig = dynamic_cast<const SlaveConfigTreeNode *>(&ctn);
- XLOG_ASSERT(orig != NULL);
+ orig = polymorphic_cast<const SlaveConfigTreeNode *>(&ctn);
new_node = new SlaveConfigTreeNode(*orig);
return new_node;
@@ -296,9 +300,8 @@
iter != master_node.const_children().end();
++iter) {
SlaveConfigTreeNode* new_node;
- const SlaveConfigTreeNode* my_child
- = dynamic_cast<SlaveConfigTreeNode*>(*iter);
- XLOG_ASSERT(my_child != NULL);
+ const SlaveConfigTreeNode* my_child =
+ polymorphic_cast<SlaveConfigTreeNode*>(*iter);
new_node = new SlaveConfigTreeNode(*my_child);
new_node->set_parent(this);
@@ -330,9 +333,9 @@
iter != master_node.const_children().end();
++iter) {
SlaveConfigTreeNode* new_node;
- const SlaveConfigTreeNode* my_child
- = dynamic_cast<SlaveConfigTreeNode*>(*iter);
- XLOG_ASSERT(my_child != NULL);
+ const SlaveConfigTreeNode* my_child =
+ polymorphic_cast<SlaveConfigTreeNode*>(*iter);
+
new_node = new SlaveConfigTreeNode(*my_child);
new_node->set_parent(this);
new_node->undelete();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Xorp-cvs
mailing list