Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Mar 30, 2013, 7:26:54 PM (12 years ago)
Author:
landauf
Message:

object lists are now stored in a Context object instead of Identifiers

Location:
code/branches/core6/src/libraries/core/object
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core6/src/libraries/core/object/Context.cc

    r9591 r9606  
    3333
    3434#include "Context.h"
     35#include "core/class/Identifier.h"
    3536
    3637namespace orxonox
     
    4950        return &rootContext;
    5051    }
     52
     53    ObjectListBase* Context::getObjectList(const Identifier* identifier)
     54    {
     55        unsigned int classID = identifier->getClassID();
     56        if (classID >= this->objectLists_.size())
     57            this->objectLists_.resize(classID + 1);
     58        if (!this->objectLists_[classID])
     59            this->objectLists_[classID] = new ObjectListBase();
     60        return this->objectLists_[classID];
     61    }
    5162}
  • code/branches/core6/src/libraries/core/object/Context.h

    r9591 r9606  
    3737#include "core/CorePrereqs.h"
    3838
     39#include <vector>
     40
     41#include "ObjectListBase.h"
     42
    3943namespace orxonox
    4044{
     
    4246    {
    4347        public:
     48            static Context* getRootContext();
     49
    4450            Context(Context* context);
    4551            virtual ~Context();
     
    4854                { return this->parentContext_; }
    4955
    50             static Context* getRootContext();
     56            ObjectListBase* getObjectList(const Identifier* identifier);
     57
     58            template <class T>
     59            inline ObjectListBase* getObjectList()
     60                { return this->getObjectList(ClassIdentifier<T>::getIdentifier()); }
     61
     62            template <class T>
     63            inline void addObject(T* object)
     64            {
     65                ObjectListBaseElement* element = this->getObjectList<T>()->add(object);
     66                object->elements_.push_back(element);
     67                if (this->getParentContext())
     68                    this->getParentContext()->addObject(object);
     69            }
    5170
    5271        private:
    5372            Context* parentContext_;
     73            std::vector<ObjectListBase*> objectLists_;
    5474    };
    5575}
  • code/branches/core6/src/libraries/core/object/Listable.cc

    r9597 r9606  
    3434#include "Listable.h"
    3535#include "ObjectListBase.h"
     36#include "Context.h"
    3637
    3738namespace orxonox
     
    4243    Listable::Listable()
    4344    {
     45        this->context_ = Context::getRootContext();
    4446        this->elements_.reserve(6);
    4547    }
  • code/branches/core6/src/libraries/core/object/Listable.h

    r9597 r9606  
    4949    class _CoreExport Listable : virtual public Identifiable
    5050    {
    51         template <class T>
    52         friend class ClassIdentifier;
     51        friend class Context;
    5352
    5453        public:
     
    5857            void unregisterObject();
    5958
     59            inline void setContext(Context* context)
     60                { this->context_ = context; }
     61            inline Context* getContext() const
     62                { return this->context_; }
     63
    6064        private:
     65            Context* context_;                             //!< The object will register itself in the object lists of this context
    6166            std::vector<ObjectListBaseElement*> elements_; //!< The corresponding ObjectListElements in all object lists the object is registered in
    6267    };
  • code/branches/core6/src/libraries/core/object/ObjectList.h

    r9604 r9606  
    4949#include "ObjectListBase.h"
    5050#include "ObjectListIterator.h"
     51#include "Context.h"
    5152
    5253namespace orxonox
     
    7172            inline static size_t size()
    7273            {
    73                 return ClassIdentifier<T>::getIdentifier()->getObjects()->size();
     74                return Context::getRootContext()->getObjectList<T>()->size();
    7475            }
    7576
     
    7778            inline static ObjectListElement<T>* begin()
    7879            {
    79                 ObjectListBase* list = ClassIdentifier<T>::getIdentifier()->getObjects();
     80                ObjectListBase* list = Context::getRootContext()->getObjectList<T>();
    8081                return static_cast<ObjectListElement<T>*>(list->begin());
    8182            }
     
    8485            inline static ObjectListElement<T>* end()
    8586            {
    86                 ObjectListBase* list = ClassIdentifier<T>::getIdentifier()->getObjects();
     87                ObjectListBase* list = Context::getRootContext()->getObjectList<T>();
    8788                return static_cast<ObjectListElement<T>*>(list->end());
    8889            }
     
    9192            inline static ObjectListElement<T>* rbegin()
    9293            {
    93                 ObjectListBase* list = ClassIdentifier<T>::getIdentifier()->getObjects();
     94                ObjectListBase* list = Context::getRootContext()->getObjectList<T>();
    9495                return static_cast<ObjectListElement<T>*>(list->rbegin());
    9596            }
     
    9899            inline static ObjectListElement<T>* rend()
    99100            {
    100                 ObjectListBase* list = ClassIdentifier<T>::getIdentifier()->getObjects();
     101                ObjectListBase* list = Context::getRootContext()->getObjectList<T>();
    101102                return static_cast<ObjectListElement<T>*>(list->rend());
    102103            }
  • code/branches/core6/src/libraries/core/object/ObjectListBase.cc

    r9604 r9606  
    8989        }
    9090
     91        if (element->objectBase_)
     92            orxout(verbose, context::object_list) << "Added object to " << element->objectBase_->getIdentifier()->getName() << "-list." << endl;
     93
    9194        if (!this->last_)
    9295        {
  • code/branches/core6/src/libraries/core/object/ObjectListBase.h

    r9604 r9606  
    124124
    125125            /// Returns a pointer to the first element in the list. Works only with Iterator.
    126             inline ObjectListBaseElement* begin() { return this->first_; }
     126            inline ObjectListBaseElement* begin() const { return this->first_; }
    127127            /// Returns a pointer to the element after the last element in the list. Works only with Iterator.
    128             inline ObjectListBaseElement* end() { return 0; }
     128            inline ObjectListBaseElement* end() const { return 0; }
    129129            /// Returns a pointer to the last element in the list. Works only with Iterator.
    130             inline ObjectListBaseElement* rbegin() { return this->last_; }
     130            inline ObjectListBaseElement* rbegin() const { return this->last_; }
    131131            /// Returns a pointer to the element in front of the first element in the list. Works only with Iterator.
    132             inline ObjectListBaseElement* rend() { return 0; }
     132            inline ObjectListBaseElement* rend() const { return 0; }
    133133
    134134            inline void registerRemovalListener(ObjectListElementRemovalListener* listener) { this->listeners_.push_back(listener); }
Note: See TracChangeset for help on using the changeset viewer.