Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Mar 29, 2013, 2:33:04 PM (11 years ago)
Author:
landauf
Message:

added proper interface (ObjectListElementRemovalListener) to notify iterators about removed elements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core6/src/libraries/core/object/ObjectListBase.h

    r9597 r9599  
    7979
    8080
     81    // ########################################
     82    // ### ObjectListElementRemovalListener ###
     83    // ########################################
     84    /// Gets called by the object list if an element is removed
     85    class _CoreExport ObjectListElementRemovalListener
     86    {
     87        public:
     88            virtual ~ObjectListElementRemovalListener() {}
     89            virtual void removedElement(ObjectListBaseElement* element) = 0;
     90    };
     91
    8192    // ###############################
    8293    // ###     ObjectListBase      ###
     
    119130            inline ObjectListBaseElement* rend() { return 0; }
    120131
    121             inline void registerIterator(void* iterator) { this->iterators_.push_back(iterator); }
    122             inline void unregisterIterator(void* iterator)
     132            inline void registerRemovalListener(ObjectListElementRemovalListener* listener) { this->listeners_.push_back(listener); }
     133            inline void unregisterRemovalListener(ObjectListElementRemovalListener* listener)
    123134            {
    124                 for (unsigned int i = 0; i < this->iterators_.size(); ++i)
     135                for (unsigned int i = 0; i < this->listeners_.size(); ++i)
    125136                {
    126                     if (iterators_[i] == iterator)
     137                    if (listeners_[i] == listener)
    127138                    {
    128                         iterators_.erase(iterators_.begin() + i);
     139                        listeners_.erase(listeners_.begin() + i);
    129140                        break;
    130141                    }
    131142                }
    132143            }
    133             inline void registerObjectListIterator(void* iterator) { this->objectListIterators_.push_back(iterator); }
    134             inline void unregisterObjectListIterator(void* iterator)
    135             {
    136                 for (unsigned int i = 0; i < this->objectListIterators_.size(); ++i)
    137                 {
    138                     if (objectListIterators_[i] == iterator)
    139                     {
    140                         objectListIterators_.erase(objectListIterators_.begin() + i);
    141                         break;
    142                     }
    143                 }
    144             }
    145             void notifyIterators(Listable* object) const;
    146144
    147145        private:
    148             ObjectListBaseElement* first_;           //!< The first element in the list
    149             ObjectListBaseElement* last_;            //!< The last element in the list
    150             std::vector<void*> iterators_;           //!< A list of Iterators pointing on an element in this list
    151             std::vector<void*> objectListIterators_; //!< A list of ObjectListIterators pointing on an element in this list
     146            void notifyRemovalListeners(ObjectListBaseElement* element) const;
     147
     148            ObjectListBaseElement* first_;                              //!< The first element in the list
     149            ObjectListBaseElement* last_;                               //!< The last element in the list
     150            std::vector<ObjectListElementRemovalListener*> listeners_;  //!< A list of Iterators pointing on an element in this list
    152151    };
    153152}
Note: See TracChangeset for help on using the changeset viewer.