[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[certi-cvs] certi/libCERTI ObjectClassSet.cc ObjectClass.cc...
From: |
certi-cvs |
Subject: |
[certi-cvs] certi/libCERTI ObjectClassSet.cc ObjectClass.cc... |
Date: |
Sat, 21 Nov 2009 21:18:28 +0000 |
CVSROOT: /sources/certi
Module name: certi
Changes by: Eric NOULARD <erk> 09/11/21 21:18:28
Modified files:
libCERTI : ObjectClassSet.cc ObjectClass.cc ObjectClass.hh
Log message:
Check-in [performance improvement] patch from Mathias
patch #6990: Use std::map for looking up objects by handle
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/ObjectClassSet.cc?cvsroot=certi&r1=3.48&r2=3.49
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/ObjectClass.cc?cvsroot=certi&r1=3.72&r2=3.73
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/ObjectClass.hh?cvsroot=certi&r1=3.48&r2=3.49
Patches:
Index: ObjectClassSet.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/ObjectClassSet.cc,v
retrieving revision 3.48
retrieving revision 3.49
diff -u -b -r3.48 -r3.49
--- ObjectClassSet.cc 19 Nov 2009 18:15:31 -0000 3.48
+++ ObjectClassSet.cc 21 Nov 2009 21:18:28 -0000 3.49
@@ -19,7 +19,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
//
-// $Id: ObjectClassSet.cc,v 3.48 2009/11/19 18:15:31 erk Exp $
+// $Id: ObjectClassSet.cc,v 3.49 2009/11/21 21:18:28 erk Exp $
// ----------------------------------------------------------------------------
// Project
@@ -35,7 +35,6 @@
#include <iosfwd>
#include <sstream>
-using std::list ;
using std::endl ;
namespace certi {
@@ -237,12 +236,10 @@
handled_const_iterator i ;
for (i = fromHandle.begin(); i != fromHandle.end(); ++i) {
- try {
- Object *object = i->second->getInstanceWithID(h);
- return object ;
- }
- catch (ObjectNotKnown &e) {
+ if (!i->second->isInstanceInClass(h)) {
+ continue;
}
+ return i->second->getInstanceWithID(h);
}
throw ObjectNotKnown("");
}
@@ -691,4 +688,4 @@
} // namespace certi
-// $Id: ObjectClassSet.cc,v 3.48 2009/11/19 18:15:31 erk Exp $
+// $Id: ObjectClassSet.cc,v 3.49 2009/11/21 21:18:28 erk Exp $
Index: ObjectClass.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/ObjectClass.cc,v
retrieving revision 3.72
retrieving revision 3.73
diff -u -b -r3.72 -r3.73
--- ObjectClass.cc 21 Nov 2009 14:46:17 -0000 3.72
+++ ObjectClass.cc 21 Nov 2009 21:18:28 -0000 3.73
@@ -19,7 +19,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
//
-// $Id: ObjectClass.cc,v 3.72 2009/11/21 14:46:17 erk Exp $
+// $Id: ObjectClass.cc,v 3.73 2009/11/21 21:18:28 erk Exp $
// ----------------------------------------------------------------------------
#include "Object.hh"
@@ -46,7 +46,6 @@
using std::cout ;
using std::endl ;
-using std::list ;
namespace certi {
@@ -284,9 +283,10 @@
ObjectClass::~ObjectClass()
{
// Deleting instances
- if (!objectSet.empty())
+ if (!_handleObjectMap.empty()) {
D.Out(pdError,
"ObjectClass %d : Instances remaining while exiting...", handle);
+ }
// Deleting Class Attributes
for (HandleClassAttributeMap::iterator i =
_handleClassAttributeMap.begin(); i != _handleClassAttributeMap.end(); ++i) {
@@ -327,12 +327,9 @@
}
// 2. Remove Instance from list.
- list<Object *>::iterator o ;
- for (o = objectSet.begin(); o != objectSet.end(); o++) {
- if ((*o)->getHandle() == the_object) {
- objectSet.erase(o); // i is dereferenced.
- break ;
- }
+ HandleObjectMap::iterator o = _handleObjectMap.find(the_object);
+ if (o != _handleObjectMap.end()) {
+ _handleObjectMap.erase(o);
}
// 3. Prepare and broadcast message.
@@ -394,12 +391,9 @@
}
// 2. Remove Instance from list.
- list<Object *>::iterator o ;
- for (o = objectSet.begin(); o != objectSet.end(); o++) {
- if ((*o)->getHandle() == the_object) {
- objectSet.erase(o); // i is dereferenced.
- break ;
- }
+ HandleObjectMap::iterator o = _handleObjectMap.find(the_object);
+ if (o != _handleObjectMap.end()) {
+ _handleObjectMap.erase(o);
}
// 3. Prepare and broadcast message.
@@ -457,10 +451,9 @@
}
// Display Instances
- cout << " " << objectSet.size() << " Instances(s):" << endl ;
- list<Object *>::const_iterator o ;
- for (o = objectSet.begin(); o != objectSet.end(); o++) {
- (*o)->display();
+ cout << " " << _handleObjectMap.size() << " Instances(s):" << endl ;
+ for (HandleObjectMap::const_iterator i = _handleObjectMap.begin(); i !=
_handleObjectMap.end(); ++i) {
+ i->second->display();
}
}
@@ -526,18 +519,17 @@
// ----------------------------------------------------------------------------
//! Get Object
Object *
-ObjectClass::getInstanceWithID(ObjectHandle the_id) const
+ObjectClass::getInstanceWithID(ObjectHandle objectHandle) const
throw (ObjectNotKnown)
{
- list<Object *>::const_iterator o ;
- for (o = objectSet.begin(); o != objectSet.end(); o++) {
- if ((*o)->getHandle() == the_id)
- return (*o);
+ HandleObjectMap::const_iterator i = _handleObjectMap.find(objectHandle);
+ if (i != _handleObjectMap.end()) {
+ return i->second;
}
std::stringstream msg;
- msg << "Could not find ObjectHandle <" << the_id << "> among <"
- << objectSet.size() << "> objects of ObjectClass "
+ msg << "Could not find ObjectHandle <" << objectHandle << "> among <"
+ << _handleObjectMap.size() << "> objects of ObjectClass "
<< handle;
Debug(D, pdError) << msg.str() << std::endl ;
@@ -582,15 +574,9 @@
present in that class.
*/
bool
-ObjectClass::isInstanceInClass(ObjectHandle theID)
+ObjectClass::isInstanceInClass(ObjectHandle objectHandle)
{
- try {
- getInstanceWithID(theID);
- }
- catch (ObjectNotKnown &e) {
- return false ;
- }
- return true ;
+ return _handleObjectMap.find(objectHandle) != _handleObjectMap.end();
}
// ----------------------------------------------------------------------------
@@ -602,7 +588,6 @@
D.Out(pdRegister, "Object Class %d: Killing Federate %d.",
handle, the_federate);
std::vector <AttributeHandle> liste_vide ;
- liste_vide.empty();
try {
// Does federate is publishing something ? (not important)
if (isFederatePublisher(the_federate)) {
@@ -618,16 +603,15 @@
catch (SecurityError &e) {}
// Does federate owns instances ?
- list<Object *>::iterator o ;
- for (o = objectSet.begin(); o != objectSet.end(); o++) {
- if ((*o)->getOwner() == the_federate) {
+ for (HandleObjectMap::const_iterator i = _handleObjectMap.begin(); i !=
_handleObjectMap.end(); ++i) {
+ if (i->second->getOwner() == the_federate) {
// Return non-NULL to indicate that :
// 1- A RemoveObject message should be broadcasted through parent
// class
// 2- The federate may own another instance, and this function
// must be called again.
// BUG: String \/
- return deleteInstance(the_federate, (*o)->getHandle(), "Killed");
+ return deleteInstance(the_federate, i->second->getHandle(),
"Killed");
}
}
@@ -725,9 +709,9 @@
the_object->addAttribute(oa);
}
- objectSet.push_front(the_object);
+ _handleObjectMap[the_object->getHandle()] = the_object;
Debug(D, pdTrace) << "Added object " << the_object->getHandle() << "/"
- << objectSet.size() << " to class " << handle << std::endl ;
+ << _handleObjectMap.size() << " to class " << handle <<
std::endl ;
// Prepare and Broadcast message for this class
ObjectClassBroadcastList *ocbList = NULL ;
@@ -779,20 +763,19 @@
return false ;
// Else, send message for each object
- list<Object *>::const_iterator o ;
- for (o = objectSet.begin(); o != objectSet.end(); ++o) {
- if ((*o)->getOwner() != federate) {
+ for (HandleObjectMap::const_iterator i = _handleObjectMap.begin(); i !=
_handleObjectMap.end(); ++i) {
+ if (i->second->getOwner() != federate) {
NM_Discover_Object message;
D.Out(pdInit,
"Sending DiscoverObj to Federate %d for Object %u in class %u
",
- federate, (*o)->getHandle(), handle,
message.getLabel().c_str());
+ federate, i->second->getHandle(), handle,
message.getLabel().c_str());
message.federation = server->federation();
message.federate = federate ;
message.setException(e_NO_EXCEPTION) ;
message.objectClass = super_handle ;
- message.object = (*o)->getHandle();
- message.setLabel((*o)->getName());
+ message.object = i->second->getHandle();
+ message.setLabel(i->second->getName());
//BUG FIXME strange!!
//message.setDate(0.0);
@@ -1815,4 +1798,4 @@
} // namespace certi
-// $Id: ObjectClass.cc,v 3.72 2009/11/21 14:46:17 erk Exp $
+// $Id: ObjectClass.cc,v 3.73 2009/11/21 21:18:28 erk Exp $
Index: ObjectClass.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/ObjectClass.hh,v
retrieving revision 3.48
retrieving revision 3.49
diff -u -b -r3.48 -r3.49
--- ObjectClass.hh 21 Nov 2009 14:46:17 -0000 3.48
+++ ObjectClass.hh 21 Nov 2009 21:18:28 -0000 3.49
@@ -19,7 +19,7 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
//
-// $Id: ObjectClass.hh,v 3.48 2009/11/21 14:46:17 erk Exp $
+// $Id: ObjectClass.hh,v 3.49 2009/11/21 21:18:28 erk Exp $
// ----------------------------------------------------------------------------
#ifndef _CERTI_OBJECT_CLASS_HH
@@ -42,7 +42,7 @@
#include "GAV.hh"
// Standard
-#include <list>
+#include <map>
#include <string>
namespace certi {
@@ -90,6 +90,11 @@
typedef std::map<AttributeHandle, ObjectClassAttribute*>
HandleClassAttributeMap;
/**
+ * The type for the object instance by handle map.
+ */
+ typedef std::map<ObjectHandle, Object*> HandleObjectMap;
+
+ /**
* Create an objectClass.
* @param[in] name the object class name
* @param[in] handle the object class handle value
@@ -327,7 +332,7 @@
/**
* All objects of this class, indexed by handle.
*/
- std::list<Object *> objectSet ;
+ HandleObjectMap _handleObjectMap;
/**
* The super class handle.
@@ -346,4 +351,4 @@
#endif // _CERTI_OBJECT_CLASS_HH
-// $Id: ObjectClass.hh,v 3.48 2009/11/21 14:46:17 erk Exp $
+// $Id: ObjectClass.hh,v 3.49 2009/11/21 21:18:28 erk Exp $
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [certi-cvs] certi/libCERTI ObjectClassSet.cc ObjectClass.cc...,
certi-cvs <=