Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Mar 15, 2009, 1:26:23 AM (15 years ago)
Author:
rgrieder
Message:
  • Using std::vector instead of std::list in register/unregister Iterator/ObjectListIterator. That is approximately 6 times faster because the list has very few elements.
  • Inlined getIdentifier() for sure by exporting the heavy part to another function.
  • Also eliminated the need of isFirstCall() because the "static initialisation chaos" only applies to variables that cannot be evaluated at compile time.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/core/ObjectListBase.h

    r2171 r2784  
    3838#define _ObjectListBase_H__
    3939
    40 #include <list>
     40#include <vector>
    4141
    4242#include "CorePrereqs.h"
     
    110110            inline Export rend() { return ObjectListBase::Export(this, 0); }
    111111
    112             inline std::list<void*>::iterator registerIterator(void* iterator) { return this->iterators_.insert(this->iterators_.begin(), iterator); }
    113             inline void unregisterIterator(const std::list<void*>::iterator& iterator) { this->iterators_.erase(iterator); }
    114             inline std::list<void*>::iterator registerObjectListIterator(void* iterator) { return this->objectListIterators_.insert(this->objectListIterators_.begin(), iterator); }
    115             inline void unregisterObjectListIterator(const std::list<void*>::iterator& iterator) { this->objectListIterators_.erase(iterator); }
     112            inline void registerIterator(void* iterator) { this->iterators_.push_back(iterator); }
     113            inline void unregisterIterator(void* iterator)
     114            {
     115                for (unsigned int i = 0; i < this->iterators_.size(); ++i)
     116                {
     117                    if (iterators_[i] == iterator)
     118                    {
     119                        iterators_.erase(iterators_.begin() + i);
     120                        break;
     121                    }
     122                }
     123            }
     124            inline void registerObjectListIterator(void* iterator) { this->objectListIterators_.push_back(iterator); }
     125            inline void unregisterObjectListIterator(void* iterator)
     126            {
     127                for (unsigned int i = 0; i < this->objectListIterators_.size(); ++i)
     128                {
     129                    if (objectListIterators_[i] == iterator)
     130                    {
     131                        objectListIterators_.erase(objectListIterators_.begin() + i);
     132                        break;
     133                    }
     134                }
     135            }
    116136            void notifyIterators(OrxonoxClass* object) const;
    117137
     
    122142            ObjectListBaseElement* first_;         //!< The first element in the list
    123143            ObjectListBaseElement* last_;          //!< The last element in the list
    124             std::list<void*> iterators_;           //!< A list of Iterators pointing on an element in this list
    125             std::list<void*> objectListIterators_; //!< A list of ObjectListIterators pointing on an element in this list
     144            std::vector<void*> iterators_;           //!< A list of Iterators pointing on an element in this list
     145            std::vector<void*> objectListIterators_; //!< A list of ObjectListIterators pointing on an element in this list
    126146    };
    127147}
Note: See TracChangeset for help on using the changeset viewer.