summaryrefslogtreecommitdiff
path: root/qmake/include/qgdict.h
Unidiff
Diffstat (limited to 'qmake/include/qgdict.h') (more/less context) (ignore whitespace changes)
-rw-r--r--qmake/include/qgdict.h222
1 files changed, 222 insertions, 0 deletions
diff --git a/qmake/include/qgdict.h b/qmake/include/qgdict.h
new file mode 100644
index 0000000..40b4568
--- a/dev/null
+++ b/qmake/include/qgdict.h
@@ -0,0 +1,222 @@
1/****************************************************************************
2** $Id$
3**
4** Definition of QGDict and QGDictIterator classes
5**
6** Created : 920529
7**
8** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
9**
10** This file is part of the tools module of the Qt GUI Toolkit.
11**
12** This file may be distributed under the terms of the Q Public License
13** as defined by Trolltech AS of Norway and appearing in the file
14** LICENSE.QPL included in the packaging of this file.
15**
16** This file may be distributed and/or modified under the terms of the
17** GNU General Public License version 2 as published by the Free Software
18** Foundation and appearing in the file LICENSE.GPL included in the
19** packaging of this file.
20**
21** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
22** licenses may use this file in accordance with the Qt Commercial License
23** Agreement provided with the Software.
24**
25** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27**
28** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
29** information about Qt Commercial License Agreements.
30** See http://www.trolltech.com/qpl/ for QPL licensing information.
31** See http://www.trolltech.com/gpl/ for GPL licensing information.
32**
33** Contact info@trolltech.com if any conditions of this licensing are
34** not clear to you.
35**
36**********************************************************************/
37
38#ifndef QGDICT_H
39#define QGDICT_H
40
41#ifndef QT_H
42#include "qptrcollection.h"
43#include "qstring.h"
44#endif // QT_H
45
46class QGDictIterator;
47class QGDItList;
48
49
50 class QBaseBucket // internal dict node
51{
52public:
53 QPtrCollection::Item getData() { return data; }
54 QPtrCollection::Item setData( QPtrCollection::Item d ) { return data = d; }
55 QBaseBucket *getNext() { return next; }
56 void setNext( QBaseBucket *n){ next = n; }
57protected:
58 QBaseBucket( QPtrCollection::Item d, QBaseBucket *n ) : data(d), next(n) {}
59 QPtrCollection::Item data;
60 QBaseBucket *next;
61};
62
63class QStringBucket : public QBaseBucket
64{
65public:
66 QStringBucket( const QString &k, QPtrCollection::Item d, QBaseBucket *n )
67 : QBaseBucket(d,n), key(k) {}
68 const QString &getKey() const { return key; }
69private:
70 QString key;
71};
72
73class QAsciiBucket : public QBaseBucket
74{
75public:
76 QAsciiBucket( const char *k, QPtrCollection::Item d, QBaseBucket *n )
77 : QBaseBucket(d,n), key(k) {}
78 const char *getKey() const { return key; }
79private:
80 const char *key;
81};
82
83class QIntBucket : public QBaseBucket
84{
85public:
86 QIntBucket( long k, QPtrCollection::Item d, QBaseBucket *n )
87 : QBaseBucket(d,n), key(k) {}
88 long getKey() const { return key; }
89private:
90 long key;
91};
92
93class QPtrBucket : public QBaseBucket
94{
95public:
96 QPtrBucket( void *k, QPtrCollection::Item d, QBaseBucket *n )
97 : QBaseBucket(d,n), key(k) {}
98 void *getKey() const { return key; }
99private:
100 void *key;
101};
102
103
104 class Q_EXPORT QGDict : public QPtrCollection// generic dictionary class
105{
106public:
107 uint count() const{ return numItems; }
108 uint size() const{ return vlen; }
109 QPtrCollection::Item look_string( const QString& key, QPtrCollection::Item,
110 int );
111 QPtrCollection::Item look_ascii( const char *key, QPtrCollection::Item, int );
112 QPtrCollection::Item look_int( long key, QPtrCollection::Item, int );
113 QPtrCollection::Item look_ptr( void *key, QPtrCollection::Item, int );
114#ifndef QT_NO_DATASTREAM
115 QDataStream &read( QDataStream & );
116 QDataStream &write( QDataStream & ) const;
117#endif
118protected:
119 enum KeyType { StringKey, AsciiKey, IntKey, PtrKey };
120
121 QGDict( uint len, KeyType kt, bool cs, bool ck );
122 QGDict( const QGDict & );
123 ~QGDict();
124
125 QGDict &operator=( const QGDict & );
126
127 boolremove_string( const QString &key, QPtrCollection::Item item=0 );
128 boolremove_ascii( const char *key, QPtrCollection::Item item=0 );
129 boolremove_int( long key, QPtrCollection::Item item=0 );
130 boolremove_ptr( void *key, QPtrCollection::Item item=0 );
131 QPtrCollection::Item take_string( const QString &key );
132 QPtrCollection::Item take_ascii( const char *key );
133 QPtrCollection::Item take_int( long key );
134 QPtrCollection::Item take_ptr( void *key );
135
136 voidclear();
137 voidresize( uint );
138
139 int hashKeyString( const QString & );
140 int hashKeyAscii( const char * );
141
142 voidstatistics() const;
143
144#ifndef QT_NO_DATASTREAM
145 virtual QDataStream &read( QDataStream &, QPtrCollection::Item & );
146 virtual QDataStream &write( QDataStream &, QPtrCollection::Item ) const;
147#endif
148private:
149 QBaseBucket **vec;
150 uintvlen;
151 uintnumItems;
152 uint keytype: 2;
153 uint cases: 1;
154 uint copyk: 1;
155 QGDItList *iterators;
156 void unlink_common( int, QBaseBucket *, QBaseBucket * );
157 QStringBucket *unlink_string( const QString &,
158 QPtrCollection::Item item = 0 );
159 QAsciiBucket *unlink_ascii( const char *, QPtrCollection::Item item = 0 );
160 QIntBucket *unlink_int( long, QPtrCollection::Item item = 0 );
161 QPtrBucket *unlink_ptr( void *, QPtrCollection::Item item = 0 );
162 voidinit( uint, KeyType, bool, bool );
163 friend class QGDictIterator;
164};
165
166
167 class Q_EXPORT QGDictIterator // generic dictionary iterator
168{
169friend class QGDict;
170public:
171 QGDictIterator( const QGDict & );
172 QGDictIterator( const QGDictIterator & );
173 QGDictIterator &operator=( const QGDictIterator & );
174 ~QGDictIterator();
175
176 QPtrCollection::Item toFirst();
177
178 QPtrCollection::Item get() const;
179 QString getKeyString() const;
180 const char *getKeyAscii() const;
181 long getKeyInt() const;
182 void *getKeyPtr() const;
183
184 QPtrCollection::Item operator()();
185 QPtrCollection::Item operator++();
186 QPtrCollection::Item operator+=(uint);
187
188protected:
189 QGDict *dict;
190
191private:
192 QBaseBucket *curNode;
193 uint curIndex;
194};
195
196inline QPtrCollection::Item QGDictIterator::get() const
197{
198 return curNode ? curNode->getData() : 0;
199}
200
201inline QString QGDictIterator::getKeyString() const
202{
203 return curNode ? ((QStringBucket*)curNode)->getKey() : QString::null;
204}
205
206inline const char *QGDictIterator::getKeyAscii() const
207{
208 return curNode ? ((QAsciiBucket*)curNode)->getKey() : 0;
209}
210
211inline long QGDictIterator::getKeyInt() const
212{
213 return curNode ? ((QIntBucket*)curNode)->getKey() : 0;
214}
215
216inline void *QGDictIterator::getKeyPtr() const
217{
218 return curNode ? ((QPtrBucket*)curNode)->getKey() : 0;
219}
220
221
222#endif // QGDICT_H