00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027
00029 #ifndef __AUTOPTRVECTOR_H__
00030 #define __AUTOPTRVECTOR_H__
00031
00032 #include "H3DApi.h"
00033 #include <vector>
00034
00035 using namespace std;
00036
00037 namespace H3D {
00042 template< class PtrType >
00043 class AutoPtrVector : public vector<PtrType*> {
00044 public:
00046 inline AutoPtrVector() {}
00047
00049 inline AutoPtrVector( const vector<PtrType> &v ) :
00050 vector<PtrType*>( v ) {
00051 }
00052
00054 inline AutoPtrVector( const AutoPtrVector<PtrType> &v ) :
00055 vector<PtrType*>( v ) {
00056 }
00057
00059 inline AutoPtrVector( typename vector<PtrType*>::size_type n ):
00060 vector< PtrType * >( n ) {}
00061
00063 inline virtual ~AutoPtrVector() {
00064 clear();
00065 }
00066
00068 inline AutoPtrVector<PtrType>
00069 &operator=( const AutoPtrVector<PtrType> &v ) {
00070 vector<PtrType*>::operator=( v );
00071 return *this;
00072 }
00073
00075 void pop_back() {
00076 delete this->back();
00077 vector< PtrType * >::pop_back();
00078 }
00079
00081 inline void erase( typename vector<PtrType*>::const_iterator pos ) {
00082 delete *pos;
00083 vector<PtrType*>::erase( pos );
00084 }
00085
00087 inline void erase( typename vector<PtrType*>::const_iterator first,
00088 typename vector<PtrType*>::const_iterator last ) {
00089 for( typename vector<PtrType*>::const_iterator i = first; i != last; ++i ) unref( *i );
00090 vector<PtrType*>::erase( first, last );
00091 }
00092
00094 inline void clear() {
00095 for( typename vector<PtrType*>::iterator i = this->begin();
00096 i != this->end(); i++ )
00097 delete (*i);
00098 vector<PtrType*>::clear();
00099 }
00100 };
00101 }
00102
00103 #endif