Changeset 25395

Show
Ignore:
Timestamp:
05/09/08 08:08:59 (3 days ago)
Author:
axeld
Message:
Followed Ingo's suggestion, and made StackDeleter an AutoDeleter specialization.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • haiku/trunk/headers/private/kernel/util/Stack.h

    r25381 r25395  
    1010 
    1111#include <SupportDefs.h> 
     12 
     13#include <AutoDeleter.h> 
    1214 
    1315 
     
    7779}; 
    7880 
    79 template<typename T> class StackDeleter { 
     81 
     82template<typename T> class StackDelete { 
    8083public: 
    81         StackDeleter(Stack<T>* stack) 
    82                 : fStack(stack) 
     84        inline void operator()(Stack<T>* stack) 
     85        { 
     86                if (stack == NULL) 
     87                        return; 
     88 
     89                T item; 
     90                while (stack->Pop(&item)) { 
     91                        delete item; 
     92                } 
     93         
     94                delete stack; 
     95        } 
     96}; 
     97 
     98template<typename T> class StackDeleter 
     99        : public BPrivate::AutoDeleter<Stack<T>, StackDelete<T> > { 
     100public: 
     101        StackDeleter() 
    83102        { 
    84103        } 
    85104 
    86         ~StackDeleter() 
     105        StackDeleter(Stack<T>* stack) 
     106                : BPrivate::AutoDeleter<Stack<T>, StackDelete<T> >(stack) 
    87107        { 
    88                 if (fStack == NULL) 
    89                         return; 
    90                  
    91                 T item; 
    92                 while (fStack->Pop(&item)) { 
    93                         delete item; 
    94                 } 
    95  
    96                 delete fStack; 
    97108        } 
    98  
    99         void Detach() 
    100         { 
    101                 fStack = NULL; 
    102         } 
    103  
    104 private: 
    105         Stack<T>*       fStack; 
    106109}; 
    107110