Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

delete_range.hpp

Go to the documentation of this file.
00001 /*==========================================================================
00002  * Copyright (c) 2004 University of Massachusetts.  All Rights Reserved.
00003  *
00004  * Use of the Lemur Toolkit for Language Modeling and Information Retrieval
00005  * is subject to the terms of the software license set forth in the LICENSE
00006  * file included with this software, and also available at
00007  * http://www.lemurproject.org/license.html
00008  *
00009  *==========================================================================
00010 */
00011 
00012 
00013 //
00014 // delete_range
00015 //
00016 // 5 March 2004 -- tds
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 

Generated on Wed Nov 3 12:58:53 2004 for Lemur Toolkit by doxygen1.2.18