diff --git a/headers/private/kernel/util/Stack.h b/headers/private/kernel/util/Stack.h index 855db1fd45..d32a8023c6 100644 --- a/headers/private/kernel/util/Stack.h +++ b/headers/private/kernel/util/Stack.h @@ -10,6 +10,8 @@ #include +#include + template class Stack { public: @@ -76,33 +78,34 @@ template class Stack { int32 fMax; }; -template class StackDeleter { -public: - StackDeleter(Stack* stack) - : fStack(stack) - { - } - ~StackDeleter() +template class StackDelete { +public: + inline void operator()(Stack* stack) { - if (fStack == NULL) + if (stack == NULL) return; - + T item; - while (fStack->Pop(&item)) { + while (stack->Pop(&item)) { delete item; } - - delete fStack; + + delete stack; } +}; - void Detach() +template class StackDeleter + : public BPrivate::AutoDeleter, StackDelete > { +public: + StackDeleter() { - fStack = NULL; } -private: - Stack* fStack; + StackDeleter(Stack* stack) + : BPrivate::AutoDeleter, StackDelete >(stack) + { + } }; #endif /* KERNEL_UTIL_STACK_H */