certi-cvs
[Top][All Lists]
Advanced

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

[certi-cvs] applications/PyHLA/hla _omt/basicdata.cpp _omt/...


From: certi-cvs
Subject: [certi-cvs] applications/PyHLA/hla _omt/basicdata.cpp _omt/...
Date: Sat, 15 Nov 2008 14:34:06 +0000

CVSROOT:        /sources/certi
Module name:    applications
Changes by:     Petr Gotthard <gotthardp>       08/11/15 14:34:06

Modified files:
        PyHLA/hla/_omt : basicdata.cpp module.cpp module.h 
        PyHLA/hla/_rti : module.cpp module.h 

Log message:
        Fixed the "static initialization order fiasco".

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/applications/PyHLA/hla/_omt/basicdata.cpp?cvsroot=certi&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/applications/PyHLA/hla/_omt/module.cpp?cvsroot=certi&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/applications/PyHLA/hla/_omt/module.h?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/applications/PyHLA/hla/_rti/module.cpp?cvsroot=certi&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/applications/PyHLA/hla/_rti/module.h?cvsroot=certi&r1=1.2&r2=1.3

Patches:
Index: _omt/basicdata.cpp
===================================================================
RCS file: /sources/certi/applications/PyHLA/hla/_omt/basicdata.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- _omt/basicdata.cpp  6 Nov 2008 08:17:28 -0000       1.3
+++ _omt/basicdata.cpp  15 Nov 2008 14:34:05 -0000      1.4
@@ -11,7 +11,7 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
- * $Id: basicdata.cpp,v 1.3 2008/11/06 08:17:28 gotthardp Exp $
+ * $Id: basicdata.cpp,v 1.4 2008/11/15 14:34:05 gotthardp Exp $
  */
 
 // note: you must include Python.h before any standard headers are included
@@ -635,10 +635,10 @@
     PyDict_SetItemString(dict, name, (PyObject *)result);
 }
 
-class BasicDataInitializer : public DataInitializer
+class BasicDataInitializer : public OmtInitializer
 {
 public:
-    BasicDataInitializer() : DataInitializer() {}
+    BasicDataInitializer() : OmtInitializer() {}
     void on_init(PyObject* module);
 };
     
@@ -660,4 +660,4 @@
         add_encoding(dict, pos->co_name, pos->co_size, pos->co_methods);
 }
 
-// $Id: basicdata.cpp,v 1.3 2008/11/06 08:17:28 gotthardp Exp $
+// $Id: basicdata.cpp,v 1.4 2008/11/15 14:34:05 gotthardp Exp $

Index: _omt/module.cpp
===================================================================
RCS file: /sources/certi/applications/PyHLA/hla/_omt/module.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- _omt/module.cpp     12 Oct 2008 13:31:13 -0000      1.2
+++ _omt/module.cpp     15 Nov 2008 14:34:05 -0000      1.3
@@ -11,7 +11,7 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
- * $Id: module.cpp,v 1.2 2008/10/12 13:31:13 gotthardp Exp $
+ * $Id: module.cpp,v 1.3 2008/11/15 14:34:05 gotthardp Exp $
  */
 
 // note: you must include Python.h before any standard headers are included
@@ -20,30 +20,37 @@
 
 #include "module.h"
 
-DataInitializer::DataInitializerList DataInitializer::m_initializers;
+typedef std::vector<OmtInitializer *> OmtInitializerList;
 
-DataInitializer::DataInitializer()
+// this is to avoid the "static initialization order fiasco"
+static OmtInitializerList& getOmtInitializers()
 {
-    m_initializers.push_back(this);
+    static OmtInitializerList initializers;
+    return initializers;
 }
 
-DataInitializer::~DataInitializer()
+OmtInitializer::OmtInitializer()
 {
-    for(DataInitializerList::iterator pos = m_initializers.begin();
-        pos != m_initializers.end(); pos++)
+    getOmtInitializers().push_back(this);
+}
+
+OmtInitializer::~OmtInitializer()
+{
+    for(OmtInitializerList::iterator pos = getOmtInitializers().begin();
+        pos != getOmtInitializers().end(); pos++)
     {
         if(*pos == this)
         {
-            m_initializers.erase(pos);
+            getOmtInitializers().erase(pos);
             break;
         }
     }
 }
 
-void DataInitializer::init(PyObject *module)
+void OmtInitializer::init(PyObject *module)
 {
-    for(DataInitializerList::iterator pos = m_initializers.begin();
-        pos != m_initializers.end(); pos++)
+    for(OmtInitializerList::iterator pos = getOmtInitializers().begin();
+        pos != getOmtInitializers().end(); pos++)
     {
         (*pos)->on_init(module);
     }
@@ -60,7 +67,7 @@
         "Modeling and Simulation (M&S) High Level Architecture (HLA) -- Object 
Model Template (OMT).");
 
     // call initializers
-    DataInitializer::init(module);
+    OmtInitializer::init(module);
 }
 
-// $Id: module.cpp,v 1.2 2008/10/12 13:31:13 gotthardp Exp $
+// $Id: module.cpp,v 1.3 2008/11/15 14:34:05 gotthardp Exp $

Index: _omt/module.h
===================================================================
RCS file: /sources/certi/applications/PyHLA/hla/_omt/module.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- _omt/module.h       25 Sep 2008 17:17:32 -0000      1.1
+++ _omt/module.h       15 Nov 2008 14:34:05 -0000      1.2
@@ -11,30 +11,26 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
- * $Id: module.h,v 1.1 2008/09/25 17:17:32 gotthardp Exp $
+ * $Id: module.h,v 1.2 2008/11/15 14:34:05 gotthardp Exp $
  */
 
-#ifndef DATA_MODULE_H
-#define DATA_MODULE_H
+#ifndef OMT_MODULE_H
+#define OMT_MODULE_H
 
 #include <vector>
 
-#define MODULE_NAME "data"
+#define MODULE_NAME "omt"
 
-class DataInitializer
+class OmtInitializer
 {
 public:
-    DataInitializer();
-    virtual ~DataInitializer();
+    OmtInitializer();
+    virtual ~OmtInitializer();
 
     static void init(PyObject *module);
     virtual void on_init(PyObject *module) = 0;
-
-private:
-    typedef std::vector<DataInitializer *> DataInitializerList;
-    static DataInitializerList m_initializers;
 };
 
-#endif // DATA_MODULE_H
+#endif // OMT_MODULE_H
 
-// $Id: module.h,v 1.1 2008/09/25 17:17:32 gotthardp Exp $
+// $Id: module.h,v 1.2 2008/11/15 14:34:05 gotthardp Exp $

Index: _rti/module.cpp
===================================================================
RCS file: /sources/certi/applications/PyHLA/hla/_rti/module.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- _rti/module.cpp     25 Sep 2008 17:17:37 -0000      1.1
+++ _rti/module.cpp     15 Nov 2008 14:34:06 -0000      1.2
@@ -11,7 +11,7 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
- * $Id: module.cpp,v 1.1 2008/09/25 17:17:37 gotthardp Exp $
+ * $Id: module.cpp,v 1.2 2008/11/15 14:34:06 gotthardp Exp $
  */
 
 // note: you must include Python.h before any standard headers are included
@@ -20,30 +20,38 @@
 
 #include "module.h"
 
-RtiInitializer::RtiInitializerList RtiInitializer::m_initializers;
+typedef std::vector<RtiInitializer *> RtiInitializerList;
+
+// this is to avoid the "static initialization order fiasco"
+static RtiInitializerList& getRtiInitializers()
+{
+    static RtiInitializerList initializers;
+    return initializers;
+}
 
 RtiInitializer::RtiInitializer()
 {
-    m_initializers.push_back(this);
+    getRtiInitializers().push_back(this);
 }
 
 RtiInitializer::~RtiInitializer()
 {
-    for(RtiInitializerList::iterator pos = m_initializers.begin();
-        pos != m_initializers.end(); pos++)
+    for(RtiInitializerList::iterator pos = getRtiInitializers().begin();
+        pos != getRtiInitializers().end(); pos++)
     {
         if(*pos == this)
         {
-            m_initializers.erase(pos);
+            getRtiInitializers().erase(pos);
             break;
         }
     }
 }
 
-void RtiInitializer::init(PyObject *module)
+void
+RtiInitializer::init(PyObject *module)
 {
-    for(RtiInitializerList::iterator pos = m_initializers.begin();
-        pos != m_initializers.end(); pos++)
+    for(RtiInitializerList::iterator pos = getRtiInitializers().begin();
+        pos != getRtiInitializers().end(); pos++)
     {
         (*pos)->on_init(module);
     }
@@ -71,4 +79,4 @@
     RtiInitializer::init(module);
 }
 
-// $Id: module.cpp,v 1.1 2008/09/25 17:17:37 gotthardp Exp $
+// $Id: module.cpp,v 1.2 2008/11/15 14:34:06 gotthardp Exp $

Index: _rti/module.h
===================================================================
RCS file: /sources/certi/applications/PyHLA/hla/_rti/module.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- _rti/module.h       9 Oct 2008 16:50:58 -0000       1.2
+++ _rti/module.h       15 Nov 2008 14:34:06 -0000      1.3
@@ -11,7 +11,7 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
- * $Id: module.h,v 1.2 2008/10/09 16:50:58 gotthardp Exp $
+ * $Id: module.h,v 1.3 2008/11/15 14:34:06 gotthardp Exp $
  */
 
 #ifndef RTI_MODULE_H
@@ -57,12 +57,8 @@
 
     static void init(PyObject *module);
     virtual void on_init(PyObject *module) = 0;
-
-private:
-    typedef std::vector<RtiInitializer *> RtiInitializerList;
-    static RtiInitializerList m_initializers;
 };
 
 #endif // RTI_MODULE_H
 
-// $Id: module.h,v 1.2 2008/10/09 16:50:58 gotthardp Exp $
+// $Id: module.h,v 1.3 2008/11/15 14:34:06 gotthardp Exp $




reply via email to

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