- Use our down_cast<> instead of dynamic_cast<> where possible. Now bug-hunting the

infamous st8ad_cast bug.


git-svn-id: svn://svn.gna.org/svn/sgpemv2/trunk@1194 3ecf2c5c-341e-0410-92b4-d18e462d057c
This commit is contained in:
tchernobog 2006-09-16 13:52:49 +00:00
parent 470901d20e
commit 6d4e756546
7 changed files with 20 additions and 14 deletions

View File

@ -26,6 +26,7 @@
#include <sgpemv2/thread.hh>
#include <sgpemv2/templates/deletor.tcc>
#include <sgpemv2/templates/down_cast.tcc>
#include <sgpemv2/templates/sequences.tcc>
#include <algorithm>
@ -52,7 +53,7 @@ ConcreteEnvironment::ConcreteEnvironment(const ConcreteEnvironment& ce) :
// Update resource pointers in a way you won't like :-)
{
for (Resources::iterator it = _resources.begin(); it != _resources.end(); it++)
it->second = new DynamicResource(dynamic_cast<const DynamicResource&>(*it->second));
it->second = new DynamicResource(down_cast<const DynamicResource&>(*it->second));
}
// DynamicProcess object need to be copied.
@ -61,7 +62,7 @@ ConcreteEnvironment::ConcreteEnvironment(const ConcreteEnvironment& ce) :
const Processes& ce_proc = ce._processes;
insert_iterator<Processes> dest(_processes, _processes.begin());
for (Iseq<Processes::const_iterator> orig = iseq(ce_proc); orig; orig++)
*dest++ = new DynamicProcess(dynamic_cast<const DynamicProcess&>(**orig));
*dest++ = new DynamicProcess(down_cast<const DynamicProcess&>(**orig));
}
@ -104,8 +105,8 @@ ConcreteEnvironment::ConcreteEnvironment(const ConcreteEnvironment& ce) :
bool found = false;
for (it5_t it5 = queue.begin(); !found && it5 != queue.end(); it5++)
{
DynamicSubRequest& _old = dynamic_cast<DynamicSubRequest&>(**it5);
DynamicSubRequest& _new = dynamic_cast<DynamicSubRequest&>(**it4);
DynamicSubRequest& _old = down_cast<DynamicSubRequest&>(**it5);
DynamicSubRequest& _new = down_cast<DynamicSubRequest&>(**it4);
if (&_old.get_core() == &_new.get_core())
{
found = true;

View File

@ -28,6 +28,8 @@
// Include full template definition only in implementation files:
#include <sgpemv2/templates/singleton.tcc>
#include <sgpemv2/templates/down_cast.tcc>
#include <algorithm>
#include <cassert>
#include <iostream>
@ -122,7 +124,7 @@ CPUPoliciesGatekeeper::activate_policy(History *history, CPUPolicy* policy) thro
policy->activate();
_active_policies[history] = policy;
// the content of history (if any) is not vaild any more.
dynamic_cast<ConcreteHistory*>(history)->reset(true);
down_cast<ConcreteHistory*>(history)->reset(true);
}
catch(const CPUPolicyException& e)
{

View File

@ -25,6 +25,7 @@
#include <sgpemv2/serialize_visitor.hh>
#include <sgpemv2/templates/deletor.tcc>
#include <sgpemv2/templates/down_cast.tcc>
#include <sgpemv2/templates/smartp.tcc>
#include <algorithm>
@ -78,8 +79,7 @@ DynamicRequest::~DynamicRequest()
bool
DynamicRequest::operator==(const Request& op2) const
{
assert(dynamic_cast<const DynamicRequest*>(&op2) != NULL);
return _static_request == dynamic_cast<const DynamicRequest&>(op2)._static_request;
return _static_request == down_cast<const DynamicRequest&>(op2)._static_request;
}

View File

@ -22,6 +22,8 @@
#include "static_resource.hh"
#include <sgpemv2/serialize_visitor.hh>
#include <sgpemv2/templates/down_cast.tcc>
#include <sgpemv2/templates/smartp.tcc>
#include <cassert>
@ -36,8 +38,7 @@ DynamicResource::DynamicResource(StaticResource *core) :
bool
DynamicResource::operator==(const Resource& op2) const
{
assert(dynamic_cast<const DynamicResource*>(&op2) != NULL);
return _static_resource == dynamic_cast<const DynamicResource&>(op2)._static_resource;
return _static_resource == down_cast<const DynamicResource&>(op2)._static_resource;
}
Glib::ustring

View File

@ -20,6 +20,7 @@
#include "dynamic_schedulable.hh"
#include <sgpemv2/templates/down_cast.tcc>
#include <sgpemv2/templates/smartp.tcc>
#include <cassert>
@ -34,8 +35,7 @@ DynamicSchedulable::DynamicSchedulable()
bool
DynamicSchedulable::operator==(const Schedulable& op2) const
{
assert(dynamic_cast<const DynamicSchedulable*>(&op2) != NULL);
return &get_core() == &(dynamic_cast<const DynamicSchedulable&>(op2).get_core());
return &get_core() == &(down_cast<const DynamicSchedulable&>(op2).get_core());
}
Glib::ustring

View File

@ -23,6 +23,7 @@
#include <sgpemv2/request.hh>
#include <sgpemv2/serialize_visitor.hh>
#include <sgpemv2/templates/down_cast.tcc>
#include <sgpemv2/templates/smartp.tcc>
#include <algorithm>
@ -64,8 +65,7 @@ DynamicSubRequest::~DynamicSubRequest()
bool
DynamicSubRequest::operator==(const SubRequest& op2) const
{
assert(dynamic_cast<const DynamicSubRequest*>(&op2) != NULL);
return _static_subrequest == dynamic_cast<const DynamicSubRequest&>(op2)._static_subrequest;
return _static_subrequest == down_cast<const DynamicSubRequest&>(op2)._static_subrequest;
}

View File

@ -28,6 +28,8 @@
// Include full template definition only in implementation files:
#include <sgpemv2/templates/singleton.tcc>
#include <sgpemv2/templates/down_cast.tcc>
#include <algorithm>
#include <cassert>
@ -96,7 +98,7 @@ ResourcePoliciesGatekeeper::activate_policy(History *history, ResourcePolicy* po
_active_policies[history] = policy;
// the content of history (if any) is not vaild any more.
dynamic_cast<ConcreteHistory*>(history)->reset(true);
down_cast<ConcreteHistory*>(history)->reset(true);
}
ResourcePoliciesGatekeeper::ResourcePoliciesGatekeeper()