![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2007 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: dtqlist.h,v $ $Revision: 1.3 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef DTQLIST_H_ 00013 #define DTQLIST_H_ 00014 00015 #include <QtCore/QList> 00016 00019 00020 template <typename T> 00021 class DtPtrQList : public QList<T> 00022 { 00023 00024 public: 00025 00026 DtPtrQList<T>() : QList<T>(), myAutoDelete(false) {}; 00027 00028 DtPtrQList<T>(const DtPtrQList<T>& orig) : QList<T>(orig), 00029 myAutoDelete(orig.myAutoDelete) {}; 00030 00031 virtual ~DtPtrQList<T>() { clear(); }; 00032 00033 void clear() 00034 { 00035 if (myAutoDelete) 00036 { 00037 typename DtPtrQList<T>::iterator it = this->begin(); 00038 while (it != this->end()) 00039 { 00040 delete *it; 00041 ++it; 00042 } 00043 } 00044 QList<T>::clear(); 00045 }; 00046 00047 void setAutoDelete(bool b) 00048 { 00049 myAutoDelete = b; 00050 }; 00051 00052 bool autoDelete() const 00053 { 00054 return myAutoDelete; 00055 }; 00056 00057 typename DtPtrQList<T>::iterator erase(typename DtPtrQList<T>::iterator pos) 00058 { 00059 T val = *pos; 00060 typename DtPtrQList<T>::iterator retVal = QList<T>::erase(pos); 00061 if (myAutoDelete) 00062 { 00063 delete val; 00064 } 00065 return retVal; 00066 }; 00067 00068 typename DtPtrQList<T>::iterator erase( 00069 typename DtPtrQList<T>::iterator first, 00070 typename DtPtrQList<T>::iterator last) 00071 { 00072 while (first != last) 00073 { 00074 erase(first++); 00075 } 00076 return last; 00077 }; 00078 00079 int findRef(T t) const 00080 { 00081 return find(t); 00082 }; 00083 00084 int find(T t) const { return indexOf(t); }; 00085 00086 void removeRef(T t) { remove(t); }; 00087 00088 void remove(T t) 00089 { 00090 typename DtPtrQList<T>::iterator it = this->begin(); 00091 while (it != this->end()) 00092 { 00093 if (*it == t) 00094 { 00095 erase(it); 00096 break; 00097 } 00098 ++it; 00099 } 00100 }; 00101 00102 void removeAt(int i) 00103 { 00104 T val = this->at(i); 00105 QList<T>::removeAt(i); 00106 if (myAutoDelete) 00107 { 00108 delete val; 00109 } 00110 }; 00111 00112 protected: 00113 bool myAutoDelete; 00114 }; 00115 00116 #endif //DTQLIST_H_