Root/
Source at commit 1322 created 12 years 7 months ago. By meklort, Add doxygen to utils folder | |
---|---|
1 | /****************************************************************************␊ |
2 | ** ␊ |
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 "qcollection.h"␊ |
43 | #include "qstring.h"␊ |
44 | #endif // QT_H␊ |
45 | ␊ |
46 | class QGDictIterator;␊ |
47 | class QGDItList;␊ |
48 | ␊ |
49 | ␊ |
50 | class QBaseBucket␉␉␉␉// internal dict node␊ |
51 | {␊ |
52 | public:␊ |
53 | QCollection::Item␉ getData()␉␉␉{ return data; }␊ |
54 | QCollection::Item␉ setData( QCollection::Item d ) { return data = d; }␊ |
55 | QBaseBucket␉␉*getNext()␉␉␉{ return next; }␊ |
56 | void␉␉ setNext( QBaseBucket *n)␉{ next = n; }␊ |
57 | protected:␊ |
58 | QBaseBucket( QCollection::Item d, QBaseBucket *n ) : data(d), next(n) {}␊ |
59 | QCollection::Item␉ data;␊ |
60 | QBaseBucket␉␉*next;␊ |
61 | };␊ |
62 | ␊ |
63 | class QStringBucket : public QBaseBucket␊ |
64 | {␊ |
65 | public:␊ |
66 | QStringBucket( const QString &k, QCollection::Item d, QBaseBucket *n )␊ |
67 | ␉: QBaseBucket(d,n), key(k)␉␉{}␊ |
68 | const QString &getKey() const␉␉{ return key; }␊ |
69 | private:␊ |
70 | QString␉ key;␊ |
71 | };␊ |
72 | ␊ |
73 | class QAsciiBucket : public QBaseBucket␊ |
74 | {␊ |
75 | public:␊ |
76 | QAsciiBucket( const char *k, QCollection::Item d, QBaseBucket *n )␊ |
77 | ␉: QBaseBucket(d,n), key(k) {}␊ |
78 | const char *getKey() const { return key; }␊ |
79 | private:␊ |
80 | const char *key;␊ |
81 | };␊ |
82 | ␊ |
83 | class QIntBucket : public QBaseBucket␊ |
84 | {␊ |
85 | public:␊ |
86 | QIntBucket( long k, QCollection::Item d, QBaseBucket *n )␊ |
87 | ␉: QBaseBucket(d,n), key(k) {}␊ |
88 | long getKey() const { return key; }␊ |
89 | private:␊ |
90 | long key;␊ |
91 | };␊ |
92 | ␊ |
93 | class QPtrBucket : public QBaseBucket␊ |
94 | {␊ |
95 | public:␊ |
96 | QPtrBucket( void *k, QCollection::Item d, QBaseBucket *n )␊ |
97 | ␉: QBaseBucket(d,n), key(k) {}␊ |
98 | void *getKey() const { return key; }␊ |
99 | private:␊ |
100 | void *key;␊ |
101 | };␊ |
102 | ␊ |
103 | ␊ |
104 | class Q_EXPORT QGDict : public QCollection␉// generic dictionary class␊ |
105 | {␊ |
106 | public:␊ |
107 | uint␉count() const␉{ return numItems; }␊ |
108 | uint␉size()␉const␉{ return vlen; }␊ |
109 | QCollection::Item look_string( const QString& key, QCollection::Item,␊ |
110 | ␉␉␉␉ int );␊ |
111 | QCollection::Item look_ascii( const char *key, QCollection::Item, int );␊ |
112 | QCollection::Item look_int( long key, QCollection::Item, int );␊ |
113 | QCollection::Item look_ptr( void *key, QCollection::Item, int );␊ |
114 | #ifndef QT_NO_DATASTREAM␊ |
115 | QDataStream &read( QDataStream & );␊ |
116 | QDataStream &write( QDataStream & ) const;␊ |
117 | #endif␊ |
118 | protected:␊ |
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 | bool␉remove_string( const QString &key, QCollection::Item item=0 );␊ |
128 | bool␉remove_ascii( const char *key, QCollection::Item item=0 );␊ |
129 | bool␉remove_int( long key, QCollection::Item item=0 );␊ |
130 | bool␉remove_ptr( void *key, QCollection::Item item=0 );␊ |
131 | QCollection::Item take_string( const QString &key );␊ |
132 | QCollection::Item take_ascii( const char *key );␊ |
133 | QCollection::Item take_int( long key );␊ |
134 | QCollection::Item take_ptr( void *key );␊ |
135 | ␊ |
136 | void␉clear();␊ |
137 | void␉resize( uint );␊ |
138 | ␊ |
139 | int␉␉hashKeyString( const QString & );␊ |
140 | int␉␉hashKeyAscii( const char * );␊ |
141 | ␊ |
142 | void␉statistics() const;␊ |
143 | ␊ |
144 | #ifndef QT_NO_DATASTREAM␊ |
145 | virtual QDataStream &read( QDataStream &, QCollection::Item & );␊ |
146 | virtual QDataStream &write( QDataStream &, QCollection::Item ) const;␊ |
147 | #endif␊ |
148 | private:␊ |
149 | QBaseBucket **vec;␊ |
150 | uint␉vlen;␊ |
151 | uint␉numItems;␊ |
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 | ␉␉␉␉ QCollection::Item item = 0 );␊ |
159 | QAsciiBucket *unlink_ascii( const char *, QCollection::Item item = 0 );␊ |
160 | QIntBucket *unlink_int( long, QCollection::Item item = 0 );␊ |
161 | QPtrBucket *unlink_ptr( void *, QCollection::Item item = 0 );␊ |
162 | void␉init( uint, KeyType, bool, bool );␊ |
163 | friend class QGDictIterator;␊ |
164 | };␊ |
165 | ␊ |
166 | ␊ |
167 | class Q_EXPORT QGDictIterator␉␉␉// generic dictionary iterator␊ |
168 | {␊ |
169 | friend class QGDict;␊ |
170 | public:␊ |
171 | QGDictIterator( const QGDict & );␊ |
172 | QGDictIterator( const QGDictIterator & );␊ |
173 | QGDictIterator &operator=( const QGDictIterator & );␊ |
174 | ~QGDictIterator();␊ |
175 | ␊ |
176 | QCollection::Item toFirst();␊ |
177 | ␊ |
178 | QCollection::Item get()␉ const;␊ |
179 | QString␉ getKeyString() const;␊ |
180 | const char␉ *getKeyAscii() const;␊ |
181 | long␉ getKeyInt() const;␊ |
182 | void␉ *getKeyPtr() const;␊ |
183 | ␊ |
184 | QCollection::Item operator()();␊ |
185 | QCollection::Item operator++();␊ |
186 | QCollection::Item operator+=(uint);␊ |
187 | ␊ |
188 | protected:␊ |
189 | QGDict␉ *dict;␊ |
190 | ␊ |
191 | private:␊ |
192 | QBaseBucket *curNode;␊ |
193 | uint␉ curIndex;␊ |
194 | };␊ |
195 | ␊ |
196 | inline QCollection::Item QGDictIterator::get() const␊ |
197 | {␊ |
198 | return curNode ? curNode->getData() : 0;␊ |
199 | }␊ |
200 | ␊ |
201 | inline QString QGDictIterator::getKeyString() const␊ |
202 | {␊ |
203 | return curNode ? ((QStringBucket*)curNode)->getKey() : QString::null;␊ |
204 | }␊ |
205 | ␊ |
206 | inline const char *QGDictIterator::getKeyAscii() const␊ |
207 | {␊ |
208 | return curNode ? ((QAsciiBucket*)curNode)->getKey() : 0;␊ |
209 | }␊ |
210 | ␊ |
211 | inline long QGDictIterator::getKeyInt() const␊ |
212 | {␊ |
213 | return curNode ? ((QIntBucket*)curNode)->getKey() : 0;␊ |
214 | }␊ |
215 | ␊ |
216 | inline void *QGDictIterator::getKeyPtr() const␊ |
217 | {␊ |
218 | return curNode ? ((QPtrBucket*)curNode)->getKey() : 0;␊ |
219 | }␊ |
220 | ␊ |
221 | ␊ |
222 | #endif // QGDICT_H␊ |
223 |