summaryrefslogtreecommitdiff
path: root/qmake/include/qcleanuphandler.h
Unidiff
Diffstat (limited to 'qmake/include/qcleanuphandler.h') (more/less context) (ignore whitespace changes)
-rw-r--r--qmake/include/qcleanuphandler.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/qmake/include/qcleanuphandler.h b/qmake/include/qcleanuphandler.h
new file mode 100644
index 0000000..471dc7b
--- a/dev/null
+++ b/qmake/include/qcleanuphandler.h
@@ -0,0 +1,127 @@
1/****************************************************************************
2** $Id$
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
43template<class Type>
44class QCleanupHandler
45{
46public:
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
82private:
83 QPtrList<Type*> *cleanupObjects;
84};
85
86template<class Type>
87class QSingleCleanupHandler
88{
89public:
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; }
102private:
103 Type **object;
104};
105
106template<class Type>
107class QSharedCleanupHandler
108{
109public:
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; }
123private:
124 Type **object;
125};
126
127#endif //QCLEANUPHANDLER_H