VR-Forces 4.0.4 Class Documentation
include/vrvCoreQt/DtPtrQList.h
Go to the documentation of this file.
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 };

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)