Ticket #8839: list.patch

File list.patch, 1.4 KB (added by SF/next_ghost, 12 years ago)

Common::ManagedList

  • common/list.h

     
    2626#define COMMON_LIST_H
    2727
    2828#include "common/scummsys.h"
     29#include "common/noncopyable.h"
    2930
    3031namespace Common {
    3132
     
    133134                insert(begin(), list.begin(), list.end());
    134135        }
    135136
    136         ~List() {
     137        virtual ~List() {
    137138                clear();
    138139                delete _anchor;
    139140        }
     
    161162                        insert(pos, *first);
    162163        }
    163164
    164         iterator erase(iterator pos) {
     165        virtual iterator erase(iterator pos) {
    165166                assert(pos != end());
    166167
    167168                NodeBase *next = pos._node->_next;
     
    173174                return iterator(next);
    174175        }
    175176
    176         iterator reverse_erase(iterator pos) {
     177        virtual iterator reverse_erase(iterator pos) {
    177178                assert(pos != end());
    178179
    179180                NodeBase *next = pos._node->_next;
     
    261262        }
    262263};
    263264
     265template<class T>
     266class ManagedList : public List<T*>, public NonCopyable {
     267        typedef List<T*> Base;
     268        typedef typename List<T*>::iterator iterator;
     269public:
     270        iterator erase(iterator pos) {
     271                if (pos != Base::end())
     272                        delete *pos;
     273                return Base::erase(pos);
     274        }
     275
     276        iterator extract(iterator pos) {
     277                return Base::erase(pos);
     278        }
     279
     280        iterator reverse_erase(iterator pos) {
     281                if (pos != Base::end())
     282                        delete *pos;
     283                return Base::reverse_erase(pos);
     284        }
     285
     286        iterator reverse_extract(iterator pos) {
     287                return Base::reverse_erase(pos);
     288        }
     289};
     290
    264291} // End of namespace Common
    265292
    266293#endif