[Top][All Lists]
[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 $
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [certi-cvs] applications/PyHLA/hla _omt/basicdata.cpp _omt/...,
certi-cvs <=