certi-cvs
[Top][All Lists]
Advanced

[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 $




reply via email to

[Prev in Thread] Current Thread [Next in Thread]