[Orxonox-commit 4982] r9651 - in code/branches/core6: src/libraries/core/class src/libraries/core/object test/core/class
landauf at orxonox.net
landauf at orxonox.net
Fri Aug 16 21:21:00 CEST 2013
Author: landauf
Date: 2013-08-16 21:20:59 +0200 (Fri, 16 Aug 2013)
New Revision: 9651
Modified:
code/branches/core6/src/libraries/core/class/Identifier.h
code/branches/core6/src/libraries/core/class/IdentifierManager.cc
code/branches/core6/src/libraries/core/object/Context.cc
code/branches/core6/src/libraries/core/object/Listable.cc
code/branches/core6/test/core/class/IdentifierClassHierarchyTest.cc
code/branches/core6/test/core/class/IdentifierSimpleClassHierarchyTest.cc
Log:
register Listable in the framework
Modified: code/branches/core6/src/libraries/core/class/Identifier.h
===================================================================
--- code/branches/core6/src/libraries/core/class/Identifier.h 2013-08-14 17:04:40 UTC (rev 9650)
+++ code/branches/core6/src/libraries/core/class/Identifier.h 2013-08-16 19:20:59 UTC (rev 9651)
@@ -408,7 +408,8 @@
template <class T>
void ClassIdentifier<T>::addObjectToList(T* object, Listable* listable)
{
- listable->getContext()->addObject(object);
+ if (listable->getContext())
+ listable->getContext()->addObject(object);
}
template <class T>
Modified: code/branches/core6/src/libraries/core/class/IdentifierManager.cc
===================================================================
--- code/branches/core6/src/libraries/core/class/IdentifierManager.cc 2013-08-14 17:04:40 UTC (rev 9650)
+++ code/branches/core6/src/libraries/core/class/IdentifierManager.cc 2013-08-16 19:20:59 UTC (rev 9651)
@@ -126,6 +126,10 @@
initializedIdentifiers.insert(it->second);
}
+
+ size_t numberOfObjects = temporaryContext.getObjectList<Listable>()->size();
+ if (numberOfObjects > 0)
+ orxout(internal_warning) << "There are still " << numberOfObjects << " listables left after creating the class hierarchy" << endl;
}
// finish the initialization of all identifiers
Modified: code/branches/core6/src/libraries/core/object/Context.cc
===================================================================
--- code/branches/core6/src/libraries/core/object/Context.cc 2013-08-14 17:04:40 UTC (rev 9650)
+++ code/branches/core6/src/libraries/core/object/Context.cc 2013-08-16 19:20:59 UTC (rev 9651)
@@ -41,15 +41,28 @@
Context* Context::rootContext_s = 0;
- Context::Context(Context* context) : Listable(this), parentContext_(context)
+ Context* getContextForInitializationOfOtherContexts()
{
- // we have to call Listable(this) to avoid circular initialization when creating a Context because Listable calls Context::getRootContext() by
- // default AND we have to set the context again in the constructor because of other classes inheriting from Context (Listable is a virtual base
- // and each subclass must call its constructor individually, so either all subclasses add Listable(this) to their initialization list or we call
- // setContext(this) here).
- this->setContext(this);
+ static size_t count = 0;
+ // the first time this is called, ++count returns 1 and the context is created
+ // the second time this is called, ++count returns 2 and NULL is returned because we're in the constructor of the context itself
+ // for each future call the context (now completely created) is returned
+ if (++count == 2)
+ return NULL;
+ else
+ {
+ static Context context(NULL);
+ return &context;
+ }
+ }
+ // Initialize Listable(*) with a special context, only used to initialize other contexts. Later in the constructor we change the context
+ Context::Context(Context* context) : Listable(getContextForInitializationOfOtherContexts()), parentContext_(context)
+ {
RegisterObject(Context);
+
+ // the context is its own context
+ this->setContext(this);
}
Context::~Context()
Modified: code/branches/core6/src/libraries/core/object/Listable.cc
===================================================================
--- code/branches/core6/src/libraries/core/object/Listable.cc 2013-08-14 17:04:40 UTC (rev 9650)
+++ code/branches/core6/src/libraries/core/object/Listable.cc 2013-08-16 19:20:59 UTC (rev 9651)
@@ -32,11 +32,14 @@
*/
#include "Listable.h"
+#include "core/CoreIncludes.h"
#include "ObjectListBase.h"
#include "Context.h"
namespace orxonox
{
+ RegisterClass(Listable);
+
/**
@brief Constructor: Allocates space in the element list.
*/
@@ -44,15 +47,19 @@
{
this->context_ = Context::getRootContext();
this->elements_.reserve(6);
+
+ RegisterObject(Listable);
}
/**
- @brief Constructor: Allocates space in the element list and assignes the context
+ @brief Constructor: Allocates space in the element list and assigns the context
*/
Listable::Listable(Context* context)
{
this->context_ = context;
this->elements_.reserve(6);
+
+ RegisterObject(Listable);
}
/**
@@ -79,6 +86,7 @@
*/
void Listable::setContext(Context* context)
{
+ assert(context);
std::vector<ObjectListBaseElement*> copy = this->elements_;
this->elements_.clear();
Modified: code/branches/core6/test/core/class/IdentifierClassHierarchyTest.cc
===================================================================
--- code/branches/core6/test/core/class/IdentifierClassHierarchyTest.cc 2013-08-14 17:04:40 UTC (rev 9650)
+++ code/branches/core6/test/core/class/IdentifierClassHierarchyTest.cc 2013-08-16 19:20:59 UTC (rev 9651)
@@ -129,6 +129,8 @@
public:
virtual void SetUp()
{
+ registerClass("Context", new ClassFactoryWithContext<Context>());
+ registerClass("Listable", new ClassFactoryWithContext<Listable>());
registerClass("OrxonoxInterface", new ClassFactoryNoArgs<OrxonoxInterface>());
registerClass("OrxonoxClass", new ClassFactoryNoArgs<OrxonoxClass>());
registerClass("BaseInterface1", static_cast<ClassFactory<BaseInterface1>*>(NULL), false).inheritsFrom(Class(OrxonoxInterface));
@@ -229,8 +231,9 @@
EXPECT_EQ(1u, identifier->getDirectParents().size());
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
- EXPECT_EQ(2u, identifier->getParents().size());
+ EXPECT_EQ(3u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
}
@@ -251,8 +254,9 @@
EXPECT_EQ(1u, identifier->getDirectParents().size());
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
- EXPECT_EQ(2u, identifier->getParents().size());
+ EXPECT_EQ(3u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
}
@@ -273,8 +277,9 @@
EXPECT_EQ(1u, identifier->getDirectParents().size());
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface1)));
- EXPECT_EQ(3u, identifier->getParents().size());
+ EXPECT_EQ(4u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
}
@@ -294,8 +299,9 @@
EXPECT_EQ(1u, identifier->getDirectParents().size());
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface2)));
- EXPECT_EQ(3u, identifier->getParents().size());
+ EXPECT_EQ(4u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
}
@@ -321,8 +327,9 @@
EXPECT_EQ(1u, identifier->getDirectParents().size());
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
- EXPECT_EQ(2u, identifier->getParents().size());
+ EXPECT_EQ(3u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
}
@@ -337,8 +344,9 @@
EXPECT_EQ(1u, identifier->getDirectParents().size());
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
- EXPECT_EQ(3u, identifier->getParents().size());
+ EXPECT_EQ(4u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
}
@@ -355,8 +363,9 @@
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
- EXPECT_EQ(6u, identifier->getParents().size());
+ EXPECT_EQ(7u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
@@ -377,8 +386,9 @@
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface2)));
- EXPECT_EQ(8u, identifier->getParents().size());
+ EXPECT_EQ(9u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
@@ -401,8 +411,9 @@
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface2)));
- EXPECT_EQ(8u, identifier->getParents().size());
+ EXPECT_EQ(9u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
@@ -425,8 +436,9 @@
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface1)));
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface2)));
- EXPECT_EQ(6u, identifier->getParents().size());
+ EXPECT_EQ(7u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
Modified: code/branches/core6/test/core/class/IdentifierSimpleClassHierarchyTest.cc
===================================================================
--- code/branches/core6/test/core/class/IdentifierSimpleClassHierarchyTest.cc 2013-08-14 17:04:40 UTC (rev 9650)
+++ code/branches/core6/test/core/class/IdentifierSimpleClassHierarchyTest.cc 2013-08-16 19:20:59 UTC (rev 9651)
@@ -45,6 +45,8 @@
public:
virtual void SetUp()
{
+ registerClass("Context", new ClassFactoryWithContext<Context>());
+ registerClass("Listable", new ClassFactoryWithContext<Listable>());
registerClass("OrxonoxInterface", new ClassFactoryNoArgs<OrxonoxInterface>());
registerClass("OrxonoxClass", new ClassFactoryNoArgs<OrxonoxClass>());
registerClass("Interface", static_cast<ClassFactory<Interface>*>(NULL), false).inheritsFrom(Class(OrxonoxInterface));
@@ -98,8 +100,9 @@
EXPECT_EQ(1u, identifier->getDirectParents().size());
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
- EXPECT_EQ(2u, identifier->getParents().size());
+ EXPECT_EQ(3u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
}
@@ -116,8 +119,9 @@
EXPECT_EQ(1u, identifier->getDirectParents().size());
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
- EXPECT_EQ(2u, identifier->getParents().size());
+ EXPECT_EQ(3u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
}
@@ -133,8 +137,9 @@
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface)));
EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
- EXPECT_EQ(5u, identifier->getParents().size());
+ EXPECT_EQ(6u, identifier->getParents().size());
EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+ EXPECT_TRUE(contains(identifier->getParents(), Class(Listable)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
EXPECT_TRUE(contains(identifier->getParents(), Class(Interface)));
More information about the Orxonox-commit
mailing list