]> pilppa.org Git - familiar-h63xx-build.git/blob - org.handhelds.familiar/packages/visiscript/files/qcleanuphandler.h
OE tree imported from monotone branch org.openembedded.oz354fam083 at revision 8b12e3...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / visiscript / files / qcleanuphandler.h
1 /****************************************************************************
2 ** $Id: qt/qcleanuphandler.h   3.3.3   edited May 27 2003 $
3 **
4 ** ...
5 **
6 ** Copyright (C) 2001-2002 Trolltech AS.  All rights reserved.
7 **
8 ** This file is part of the tools module of the Qt GUI Toolkit.
9 **
10 ** This file may be distributed under the terms of the Q Public License
11 ** as defined by Trolltech AS of Norway and appearing in the file
12 ** LICENSE.QPL included in the packaging of this file.
13 **
14 ** This file may be distributed and/or modified under the terms of the
15 ** GNU General Public License version 2 as published by the Free Software
16 ** Foundation and appearing in the file LICENSE.GPL included in the
17 ** packaging of this file.
18 **
19 ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
20 ** licenses may use this file in accordance with the Qt Commercial License
21 ** Agreement provided with the Software.
22 **
23 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
24 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
25 **
26 ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
27 **   information about Qt Commercial License Agreements.
28 ** See http://www.trolltech.com/qpl/ for QPL licensing information.
29 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
30 **
31 ** Contact info@trolltech.com if any conditions of this licensing are
32 ** not clear to you.
33 **
34 **********************************************************************/
35
36 #ifndef QCLEANUPHANDLER_H
37 #define QCLEANUPHANDLER_H
38
39 #ifndef QT_H
40 #include "qptrlist.h"
41 #endif // QT_H
42
43 template<class Type>
44 class QCleanupHandler
45 {
46 public:
47     QCleanupHandler() : cleanupObjects( 0 ) {}
48     ~QCleanupHandler() { clear(); }
49
50     Type* add( Type **object ) {
51         if ( !cleanupObjects )
52             cleanupObjects = new QPtrList<Type*>;
53         cleanupObjects->insert( 0, object );
54         return *object;
55     }
56
57     void remove( Type **object ) {
58         if ( !cleanupObjects )
59             return;
60         if ( cleanupObjects->findRef( object ) >= 0 )
61             (void) cleanupObjects->take();
62     }
63
64     bool isEmpty() const {
65         return cleanupObjects ? cleanupObjects->isEmpty() : TRUE;
66     }
67
68     void clear() {
69         if ( !cleanupObjects )
70             return;
71         QPtrListIterator<Type*> it( *cleanupObjects );
72         Type **object;
73         while ( ( object = it.current() ) ) {
74             delete *object;
75             *object = 0;
76             cleanupObjects->remove( object );
77         }
78         delete cleanupObjects;
79         cleanupObjects = 0;
80     }
81
82 private:
83     QPtrList<Type*> *cleanupObjects;
84 };
85
86 template<class Type>
87 class QSingleCleanupHandler
88 {
89 public:
90     QSingleCleanupHandler() : object( 0 ) {}
91     ~QSingleCleanupHandler() {
92         if ( object ) {
93             delete *object;
94             *object = 0;
95         }
96     }
97     Type* set( Type **o ) {
98         object = o;
99         return *object;
100     }
101     void reset() { object = 0; }
102 private:
103     Type **object;
104 };
105
106 template<class Type>
107 class QSharedCleanupHandler
108 {
109 public:
110     QSharedCleanupHandler() : object( 0 ) {}
111     ~QSharedCleanupHandler() {
112         if ( object ) {
113             if ( (*object)->deref() )
114                 delete *object;
115             *object = 0;
116         }
117     }
118     Type* set( Type **o ) {
119         object = o;
120         return *object;
121     }
122     void reset() { object = 0; }
123 private:
124     Type **object;
125 };
126
127 #endif //QCLEANUPHANDLER_H