certi-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[certi-cvs] certi/RTIG Federation.cc Federation.hh


From: certi-cvs
Subject: [certi-cvs] certi/RTIG Federation.cc Federation.hh
Date: Tue, 24 Nov 2009 18:54:52 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      09/11/24 18:54:52

Modified files:
        RTIG           : Federation.cc Federation.hh 

Log message:
        Check-in complexity enhancement patch from Mathias
        patch #6996: Use a std::map for storing the federates in RTIG

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/Federation.cc?cvsroot=certi&r1=3.118&r2=3.119
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/Federation.hh?cvsroot=certi&r1=3.60&r2=3.61

Patches:
Index: Federation.cc
===================================================================
RCS file: /sources/certi/certi/RTIG/Federation.cc,v
retrieving revision 3.118
retrieving revision 3.119
diff -u -b -r3.118 -r3.119
--- Federation.cc       23 Nov 2009 07:34:28 -0000      3.118
+++ Federation.cc       24 Nov 2009 18:54:51 -0000      3.119
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: Federation.cc,v 3.118 2009/11/23 07:34:28 erk Exp $
+// $Id: Federation.cc,v 3.119 2009/11/24 18:54:51 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -403,7 +403,7 @@
 int
 Federation::getNbFederates() const
 {
-    return federates.size();
+    return _handleFederateMap.size();
 }
 
 // ----------------------------------------------------------------------------
@@ -465,7 +465,8 @@
     }
 
     FederateHandle federate_handle = federateHandles.provide();
-    federates.push_back(Federate(federate_name, federate_handle));
+    _handleFederateMap.insert(HandleFederateMap::value_type(federate_handle, 
Federate(federate_name, federate_handle)));
+    Federate& federate = getFederate(federate_handle);
     D.Out(pdInit, "Federate %d joined Federation %d.", federate_handle, 
handle);
 
     // Send, to the newly added federate, a Null message from each regulating
@@ -502,7 +503,7 @@
                       " to the new Federate.", (*i).first.c_str(), 
ASPMessage.getType());
 
                 ASPMessage.send(tcp_link,NM_msgBufSend);
-                federates.back().addSynchronizationLabel((*i).first);
+                federate.addSynchronizationLabel((*i).first);
             }
         }
     }
@@ -761,13 +762,13 @@
 
     // Broadcast the message 'msg' to all Federates in the Federation
     // except to Federate whose Handle is 'Except_Federate'.
-    for (FederateList::const_iterator i = federates.begin(); i != 
federates.end(); ++i) {
-        if (i->getHandle() != except_federate) {
+    for (HandleFederateMap::iterator i = _handleFederateMap.begin(); i != 
_handleFederateMap.end(); ++i) {
+        if (i->first != except_federate) {
             try {
 #ifdef HLA_USES_UDP
-                socket = server->getSocketLink(i->getHandle(), BEST_EFFORT);
+                socket = server->getSocketLink(i->second.getHandle(), 
BEST_EFFORT);
 #else
-                socket = server->getSocketLink(i->getHandle());
+                socket = server->getSocketLink(i->second.getHandle());
 #endif
                 msg->send(socket,NM_msgBufSend);
             }
@@ -800,22 +801,22 @@
         // Broadcast the message 'msg' to some Federates (done in fede_array)
         // in the Federation
         // except to Federate whose Handle is 'Except_Federate'.
-        for (FederateList::const_iterator i = federates.begin(); i != 
federates.end(); ++i)
+        for (HandleFederateMap::iterator i = _handleFederateMap.begin(); i != 
_handleFederateMap.end(); ++i)
             {
-            if (i->getHandle() != except_federate)
+            if (i->second.getHandle() != except_federate)
                 {
                 ifed = 0 ;
                 while ( ifed < nbfed )
                     {
-                    if ( i->getHandle() == fede_array[ifed] )
+                    if ( i->second.getHandle() == fede_array[ifed] )
                         // Federate i has to be informed because into 
fede_array
                         {
                         try
                             {
 #ifdef HLA_USES_UDP
-                            socket = server->getSocketLink(i->getHandle(), 
BEST_EFFORT);
+                            socket = 
server->getSocketLink(i->second.getHandle(), BEST_EFFORT);
 #else
-                            socket = server->getSocketLink(i->getHandle());
+                            socket = 
server->getSocketLink(i->second.getHandle());
 #endif
                             msg->send(socket,NM_msgBufSend);
                             }
@@ -1011,21 +1012,17 @@
         throw RTIinternalError("Bad pause label(null).");
 
     // Verify label does not already exists
-    std::map<std::string, std::string>::const_iterator i ;
-    i = synchronizationLabels.begin();
-    for (; i != synchronizationLabels.end(); i++) {
-        if (i->first == label) {
+    std::map<std::string, std::string>::const_iterator i = 
synchronizationLabels.find(label);
+    if (i != synchronizationLabels.end()) {
             throw FederationAlreadyPaused(""); // Label already pending.
         }
-    }
 
     // If not already in pending labels, insert to list.
     synchronizationLabels.insert(pair<const std::string, std::string>(label, 
tag));
 
     // Add label to each federate (may throw RTIinternalError).
-    FederateList::iterator j ;
-    for (j = federates.begin(); j != federates.end(); ++j) {
-        j->addSynchronizationLabel(label);
+    for (HandleFederateMap::iterator i = _handleFederateMap.begin(); i != 
_handleFederateMap.end(); ++i) {
+        i->second.addSynchronizationLabel(label);
     }
 
     Debug(D, pdTerm) << "Federation " << handle << " is now synchronizing for 
label "
@@ -1059,25 +1056,21 @@
         throw RTIinternalError("Bad pause label(null).");
 
     // Verify label does not already exists
-    std::map<std::string, std::string>::const_iterator i ;
-    i = synchronizationLabels.begin();
-    for (; i != synchronizationLabels.end(); i++) {
-        if (i->first == label) {
+    std::map<std::string, std::string>::const_iterator i = 
synchronizationLabels.find(label);
+    if (i != synchronizationLabels.end()) {
             throw FederationAlreadyPaused(""); // Label already pending.
         }
-    }
 
     // If not already in pending labels, insert to list.
     synchronizationLabels.insert(pair<const std::string, std::string>(label, 
tag));
 
     // Add label to each federate into the set only (may throw 
RTIinternalError).
-    FederateList::iterator j ;
     for (int i=0 ; i < federate_setSize  ;i++ )
         {
-        for (j = federates.begin(); j != federates.end(); ++j)
+        for (HandleFederateMap::iterator j = _handleFederateMap.begin(); j != 
_handleFederateMap.end(); ++j)
             {
-            if ( (federate_set[i] == j->getHandle()) || (federate == 
j->getHandle()) )
-                             j->addSynchronizationLabel(label);
+            if ( (federate_set[i] == j->second.getHandle()) || (federate == 
j->second.getHandle()) )
+                             j->second.addSynchronizationLabel(label);
             }
         }
 
@@ -1176,8 +1169,8 @@
     if (saveInProgress)
         throw SaveInProgress("Already in saving state.");
 
-    for (FederateList::iterator j = federates.begin(); j != federates.end(); 
++j) {
-        j->setSaving(true);
+    for (HandleFederateMap::iterator j = _handleFederateMap.begin(); j != 
_handleFederateMap.end(); ++j) {
+        j->second.setSaving(true);
     }
 
     saveStatus = true ;
@@ -1215,8 +1208,8 @@
     if (saveInProgress)
         throw SaveInProgress("Already in saving state.");
 
-    for (FederateList::iterator j = federates.begin(); j != federates.end(); 
++j) {
-        j->setSaving(true);
+    for (HandleFederateMap::iterator j = _handleFederateMap.begin(); j != 
_handleFederateMap.end(); ++j) {
+        j->second.setSaving(true);
     }
 
     saveStatus = true ;
@@ -1264,8 +1257,8 @@
         saveStatus = false ;
 
     // Verify that all federates save ended (complete or not).
-    for (FederateList::iterator j = federates.begin(); j != federates.end(); 
++j) {
-        if (j->isSaving())
+    for (HandleFederateMap::iterator j = _handleFederateMap.begin(); j != 
_handleFederateMap.end(); ++j) {
+        if (j->second.isSaving())
             {
             G.Out(pdGendoc,"exit  Federation::federateSaveStatus one federate 
has not save ended");
             return ;
@@ -1363,8 +1356,8 @@
         }
 
     // Otherwise...
-    for (FederateList::iterator i = federates.begin(); i != federates.end(); 
++i) {
-        i->setRestoring(true);
+    for (HandleFederateMap::iterator i = _handleFederateMap.begin(); i != 
_handleFederateMap.end(); ++i) {
+        i->second.setRestoring(true);
     }
     restoreStatus = true ;
     restoreInProgress = true ;
@@ -1384,8 +1377,8 @@
     msg->federation = handle ;
     msg->setLabel(the_label);
 
-    for (FederateList::iterator i = federates.begin(); i != federates.end(); 
++i) {
-        msg->federate = i->getHandle();
+    for (HandleFederateMap::iterator i = _handleFederateMap.begin(); i != 
_handleFederateMap.end(); ++i) {
+        msg->federate = i->second.getHandle();
 
         // send message.
         socket = server->getSocketLink(msg->federate);
@@ -1414,8 +1407,8 @@
         restoreStatus = false ;
 
     // Verify that all federates save ended (complete or not).
-    for (FederateList::iterator j = federates.begin(); j != federates.end(); 
++j) {
-        if (j->isRestoring())
+    for (HandleFederateMap::iterator i = _handleFederateMap.begin(); i != 
_handleFederateMap.end(); ++i) {
+        if (i->second.isRestoring())
             return ;
     }
 
@@ -1439,12 +1432,10 @@
 Federation::getFederate(FederateHandle federate_handle)
     throw (FederateNotExecutionMember)
 {
-    for (FederateList::iterator i = federates.begin(); i != federates.end(); 
++i) {
-        if (i->getHandle() == federate_handle)
-            return *i ;
-    }
-
+    HandleFederateMap::iterator i = _handleFederateMap.find(federate_handle);
+    if (i == _handleFederateMap.end())
     throw FederateNotExecutionMember("Federate Handle not found.");
+    return i->second;
 }
 
 // ----------------------------------------------------------------------------
@@ -1453,9 +1444,9 @@
 Federation::getFederate(const std::string& federate_name)
     throw (FederateNotExecutionMember)
 {
-    for (FederateList::iterator i = federates.begin(); i != federates.end(); 
++i) {
-        if (i->getName() == federate_name)
-            return *i ;
+    for (HandleFederateMap::iterator i = _handleFederateMap.begin(); i != 
_handleFederateMap.end(); ++i) {
+        if (i->second.getName() == federate_name)
+            return i->second;
     }
 
     std::stringstream msg;
@@ -1472,7 +1463,7 @@
 Federation::empty() const
     throw (FederatesCurrentlyJoined)
 {
-    if (federates.empty())
+    if (_handleFederateMap.empty())
         return true ;
     else
         throw FederatesCurrentlyJoined("");
@@ -1485,12 +1476,10 @@
 Federation::check(FederateHandle federate_handle) const
     throw (FederateNotExecutionMember)
 {
-    for (FederateList::const_iterator i = federates.begin(); i != 
federates.end(); ++i) {
-        if (i->getHandle() == federate_handle)
-            return true ;
-    }
-
-    throw FederateNotExecutionMember("");
+    HandleFederateMap::const_iterator i = 
_handleFederateMap.find(federate_handle);
+    if (i == _handleFederateMap.end())
+        throw FederateNotExecutionMember("Federate Handle not found.");
+    return true;
 }
 
 // ----------------------------------------------------------------------------
@@ -1643,16 +1632,15 @@
 Federation::remove(FederateHandle federate_handle)
     throw (FederateOwnsAttributes, FederateNotExecutionMember)
 {
-    for (FederateList::iterator i = federates.begin(); i != federates.end(); 
++i) {
-        if (i->getHandle() == federate_handle) {
+    HandleFederateMap::iterator i = _handleFederateMap.find(federate_handle);
+    if (i != _handleFederateMap.end()) {
             // BUG: RemoveFederate: Should see if Federate owns attributes
            federateHandles.free(federate_handle);
-            federates.erase(i);
+        _handleFederateMap.erase(i);
 
             D.Out(pdInit, "Federation %d: Removed Federate %d.", handle,
                   federate_handle);
-            return ;
-        }
+        return;
     }
 
     D.Out(pdExcept, "Federation %d could not remove unknown federate %d.",
@@ -1734,22 +1722,18 @@
     federate.removeSynchronizationLabel(label);
 
     // Test in every federate is synchronized. Otherwise, quit method.
-    for (FederateList::iterator j = federates.begin(); j != federates.end(); 
++j) {
-        if (j->isSynchronizationLabel(label))
-            return ;
+    for (HandleFederateMap::iterator i = _handleFederateMap.begin(); i != 
_handleFederateMap.end(); ++i) {
+        if (i->second.isSynchronizationLabel(label))
+            return;
     }
 
     // All federates from federation has called synchronizationPointAchieved.
 
     D.Out(pdTerm, "Federation %d is not Paused anymore.", handle);
     // Remove label from federation list.
-    std::map<std::string, std::string>::iterator i ;
-    i = synchronizationLabels.begin();
-    for (; i != synchronizationLabels.end(); i++) {
-        if (i->first == label) {
+    std::map<std::string, std::string>::iterator i = 
synchronizationLabels.find(label);
+    if (i != synchronizationLabels.end()) {
             synchronizationLabels.erase(i);
-            break ;
-        }
     }
 
     // send a federationSynchronized().
@@ -2488,8 +2472,8 @@
     bool status = false;
     while (cur != NULL) {
         if ((!xmlStrcmp(cur->name, NODE_FEDERATE))) {
-            for (FederateList::iterator i = federates.begin(); i != 
federates.end(); ++i) {
-                if 
(!strcmp(i->getName().c_str(),XmlParser::CleanXmlGetProp(cur, (const xmlChar*) 
"name"))) {
+            for (HandleFederateMap::iterator i = _handleFederateMap.begin(); i 
!= _handleFederateMap.end(); ++i) {
+                if 
(!strcmp(i->second.getName().c_str(),XmlParser::CleanXmlGetProp(cur, (const 
xmlChar*) "name"))) {
                     // Set federate constrained status
                     if (!strcmp("true", XmlParser::CleanXmlGetProp(cur, (const 
xmlChar*) "constrained"))) {
                         status = true ;
@@ -2498,14 +2482,14 @@
                         status = false ;
                     }
 
-                    i->setConstrained(status);
+                    i->second.setConstrained(status);
 
                     // Set federate regulating status
                     status = !strcmp("true", XmlParser::CleanXmlGetProp(cur, 
(const xmlChar *) "regulator"));
 
-                    i->setRegulator(status);
+                    i->second.setRegulator(status);
 
-                    i->setHandle(strtol(XmlParser::CleanXmlGetProp(cur, (const 
xmlChar *) "handle"), 0, 10));
+                    i->second.setHandle(strtol(XmlParser::CleanXmlGetProp(cur, 
(const xmlChar *) "handle"), 0, 10));
                     break ;
                 }
             }
@@ -2538,21 +2522,21 @@
 
     xmlNodePtr federate ;
 
-    for (FederateList::iterator i = federates.begin(); i != federates.end(); 
++i) {
+    for (HandleFederateMap::iterator i = _handleFederateMap.begin(); i != 
_handleFederateMap.end(); ++i) {
         federate = xmlNewChild(federation, NULL, NODE_FEDERATE, NULL);
 
         xmlSetProp(federate,
                    (const xmlChar *) "name",
-                   (const xmlChar *) i->getName().c_str());
+                   (const xmlChar *) i->second.getName().c_str());
 
-        sprintf(t, "%ld", i->getHandle());
+        sprintf(t, "%ld", i->second.getHandle());
         xmlSetProp(federate, (const xmlChar *) "handle", (const xmlChar *) t);
 
         xmlSetProp(federate,
                    (const xmlChar *)"constrained", (const xmlChar *)
-                   ((i->isConstrained()) ? "true" : "false"));
+                   ((i->second.isConstrained()) ? "true" : "false"));
         xmlSetProp(federate, (const xmlChar *) "regulator",
-                   (const xmlChar *)((i->isRegulator()) ? "true" : "false"));
+                   (const xmlChar *)((i->second.isRegulator()) ? "true" : 
"false"));
     }
 
     xmlSetDocCompressMode(doc, 9);
@@ -2610,5 +2594,5 @@
 
 }} // namespace certi/rtig
 
-// $Id: Federation.cc,v 3.118 2009/11/23 07:34:28 erk Exp $
+// $Id: Federation.cc,v 3.119 2009/11/24 18:54:51 erk Exp $
 

Index: Federation.hh
===================================================================
RCS file: /sources/certi/certi/RTIG/Federation.hh,v
retrieving revision 3.60
retrieving revision 3.61
diff -u -b -r3.60 -r3.61
--- Federation.hh       19 Nov 2009 18:15:29 -0000      3.60
+++ Federation.hh       24 Nov 2009 18:54:52 -0000      3.61
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: Federation.hh,v 3.60 2009/11/19 18:15:29 erk Exp $
+// $Id: Federation.hh,v 3.61 2009/11/24 18:54:52 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_RTIG_FEDERATION_HH
@@ -666,9 +666,9 @@
         throw (FederateNotExecutionMember);
 
     // Private attributes
-    typedef std::vector<Federate> FederateList ;
+    typedef std::map<FederateHandle, Federate> HandleFederateMap;
 
-    FederateList federates ;
+    HandleFederateMap _handleFederateMap;
     bool saveInProgress ;
     bool restoreInProgress ;
     bool saveStatus ; //!< True if saving was correctly done, false otherwise.
@@ -687,4 +687,4 @@
 
 #endif // _CERTI_RTIG_FEDERATION_HH
 
-// $Id: Federation.hh,v 3.60 2009/11/19 18:15:29 erk Exp $
+// $Id: Federation.hh,v 3.61 2009/11/24 18:54:52 erk Exp $




reply via email to

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