00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef LEMUR_DELETE_RANGE_HPP
00020 #define LEMUR_DELETE_RANGE_HPP
00021
00022 #include <vector>
00023 #include <stack>
00024 #include <map>
00025
00026 template<typename VectorType>
00027 void delete_vector_contents( std::vector<VectorType>& vector ) {
00028 typedef typename std::vector<VectorType>::iterator vec_iter;
00029
00030 vec_iter begin = vector.begin();
00031 vec_iter end = vector.end();
00032 vec_iter iter;
00033
00034 for( iter = begin; iter != end; iter++ ) {
00035 delete *iter;
00036 }
00037
00038 vector.clear();
00039 }
00040
00041 template<typename MapKey, typename MapValue>
00042 void delete_map_contents( std::map<MapKey, MapValue*>& mp ) {
00043 typedef typename std::map<MapKey, MapValue*>::iterator map_iter;
00044
00045 map_iter begin = mp.begin();
00046 map_iter end = mp.end();
00047 map_iter iter;
00048
00049 for( iter = begin; iter != end; iter++ )
00050 delete iter->second;
00051
00052 mp.clear();
00053 }
00054
00055 template<typename VectorType>
00056 class VectorDeleter {
00057 private:
00058 std::vector<VectorType>* _vec;
00059
00060 public:
00061 VectorDeleter() : _vec(0) {}
00062 VectorDeleter( std::vector<VectorType>& vec ) : _vec(&vec) {}
00063 ~VectorDeleter() {
00064 if( _vec )
00065 delete_vector_contents<VectorType>( *_vec );
00066 }
00067
00068 void setVector( std::vector<VectorType>& vec ) {
00069 _vec = &vec;
00070 }
00071 };
00072
00073 template<typename StackType>
00074 class StackDeleter {
00075 private:
00076 std::stack<StackType*>* _stack;
00077
00078 public:
00079 StackDeleter() : _stack(0) {}
00080 StackDeleter( std::stack<StackType*>& stack ) : _stack(&stack) {}
00081 ~StackDeleter() {
00082 if( _stack ) {
00083 while( _stack->size() ) {
00084 delete _stack->top();
00085 _stack->pop();
00086 }
00087 }
00088 }
00089
00090 void setStack( std::stack<StackType*>& stack ) {
00091 _stack = &stack;
00092 }
00093 };
00094
00095 #endif // LEMUR_DELETE_RANGE_HPP
00096