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