diff options
author | Mike Buland <eichlan@xagasoft.com> | 2012-03-31 17:34:11 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2012-03-31 17:34:11 +0000 |
commit | 82da0238a8171cf8bba6bb1c82d5abba207a10aa (patch) | |
tree | 83ff9b022b658e7a056fc85f132937b8bda4c1c3 /c++-qt/src/dictionary.cpp | |
parent | 7dd5c386611e31930e7ccfb83cb585df27696881 (diff) | |
download | libgats-82da0238a8171cf8bba6bb1c82d5abba207a10aa.tar.gz libgats-82da0238a8171cf8bba6bb1c82d5abba207a10aa.tar.bz2 libgats-82da0238a8171cf8bba6bb1c82d5abba207a10aa.tar.xz libgats-82da0238a8171cf8bba6bb1c82d5abba207a10aa.zip |
Gats for QT is here. It's a pretty basic conversion right now, it doesn't
support debugging formatting (Bu::sio), it doesn't support gats-text string
parsing, and the exceptions need to be fixed to be real exceptions.
The basic functions have been renamed to match the Qt API and we use QT types
for everything (QHash, QList, QByteArray). It needs more testing, but it's a
great start.
Diffstat (limited to 'c++-qt/src/dictionary.cpp')
-rw-r--r-- | c++-qt/src/dictionary.cpp | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/c++-qt/src/dictionary.cpp b/c++-qt/src/dictionary.cpp new file mode 100644 index 0000000..ad4759a --- /dev/null +++ b/c++-qt/src/dictionary.cpp | |||
@@ -0,0 +1,349 @@ | |||
1 | #include "gats-qt/dictionary.h" | ||
2 | |||
3 | #include "gats-qt/boolean.h" | ||
4 | #include "gats-qt/integer.h" | ||
5 | #include "gats-qt/float.h" | ||
6 | #include "gats-qt/string.h" | ||
7 | #include "gats-qt/list.h" | ||
8 | |||
9 | Gats::Dictionary::Dictionary() | ||
10 | { | ||
11 | } | ||
12 | |||
13 | Gats::Dictionary::~Dictionary() | ||
14 | { | ||
15 | for( iterator i = begin(); i != end(); i++ ) | ||
16 | { | ||
17 | delete *i; | ||
18 | } | ||
19 | } | ||
20 | |||
21 | void Gats::Dictionary::write( QIODevice &rOut ) const | ||
22 | { | ||
23 | rOut.write("d", 1 ); | ||
24 | for( const_iterator i= begin(); i != end(); i++ ) | ||
25 | { | ||
26 | Gats::String s( i.key() ); | ||
27 | s.write( rOut ); | ||
28 | (*i)->write( rOut ); | ||
29 | } | ||
30 | rOut.write("e", 1 ); | ||
31 | } | ||
32 | |||
33 | void Gats::Dictionary::read( QIODevice &rIn, char cType ) | ||
34 | { | ||
35 | for(;;) | ||
36 | { | ||
37 | char cNext; | ||
38 | rIn.read( &cNext, 1 ); | ||
39 | if( cNext == 'e' ) | ||
40 | break; | ||
41 | if( cNext != 's' ) | ||
42 | throw "PUT GOOD EXCEPTION HERE"; | ||
43 | Gats::String sKey; | ||
44 | sKey.read( rIn, cNext ); | ||
45 | |||
46 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
47 | sKey, Gats::Object::read( rIn ) | ||
48 | ); | ||
49 | } | ||
50 | } | ||
51 | |||
52 | void Gats::Dictionary::insert( const QByteArray &sKey, char i ) | ||
53 | { | ||
54 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
55 | sKey, new Gats::Integer( i ) | ||
56 | ); | ||
57 | } | ||
58 | |||
59 | void Gats::Dictionary::insert( const QByteArray &sKey, unsigned char i ) | ||
60 | { | ||
61 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
62 | sKey, new Gats::Integer( i ) | ||
63 | ); | ||
64 | } | ||
65 | |||
66 | void Gats::Dictionary::insert( const QByteArray &sKey, signed char i ) | ||
67 | { | ||
68 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
69 | sKey, new Gats::Integer( i ) | ||
70 | ); | ||
71 | } | ||
72 | |||
73 | void Gats::Dictionary::insert( const QByteArray &sKey, unsigned short i ) | ||
74 | { | ||
75 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
76 | sKey, new Gats::Integer( i ) | ||
77 | ); | ||
78 | } | ||
79 | |||
80 | void Gats::Dictionary::insert( const QByteArray &sKey, signed short i ) | ||
81 | { | ||
82 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
83 | sKey, new Gats::Integer( i ) | ||
84 | ); | ||
85 | } | ||
86 | |||
87 | void Gats::Dictionary::insert( const QByteArray &sKey, unsigned int i ) | ||
88 | { | ||
89 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
90 | sKey, new Gats::Integer( i ) | ||
91 | ); | ||
92 | } | ||
93 | |||
94 | void Gats::Dictionary::insert( const QByteArray &sKey, signed int i ) | ||
95 | { | ||
96 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
97 | sKey, new Gats::Integer( i ) | ||
98 | ); | ||
99 | } | ||
100 | |||
101 | void Gats::Dictionary::insert( const QByteArray &sKey, unsigned long i ) | ||
102 | { | ||
103 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
104 | sKey, new Gats::Integer( i ) | ||
105 | ); | ||
106 | } | ||
107 | |||
108 | void Gats::Dictionary::insert( const QByteArray &sKey, signed long i ) | ||
109 | { | ||
110 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
111 | sKey, new Gats::Integer( i ) | ||
112 | ); | ||
113 | } | ||
114 | |||
115 | void Gats::Dictionary::insert( const QByteArray &sKey, unsigned long long i ) | ||
116 | { | ||
117 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
118 | sKey, new Gats::Integer( i ) | ||
119 | ); | ||
120 | } | ||
121 | |||
122 | void Gats::Dictionary::insert( const QByteArray &sKey, signed long long i ) | ||
123 | { | ||
124 | ((QHash<QByteArray, Gats::Object *> *)this)->insert( | ||
125 | sKey, new Gats::Integer( i ) | ||
126 | ); | ||
127 | } | ||
128 | /* | ||
129 | void Gats::Dictionary::insert( const QByteArray &sKey, bool b ) | ||
130 | { | ||
131 | QHash<QByteArray, Gats::Object *>::insert( | ||
132 | sKey, new Gats::Boolean( b ) | ||
133 | ); | ||
134 | }*/ | ||
135 | |||
136 | void Gats::Dictionary::insert( const QByteArray &sKey, float d ) | ||
137 | { | ||
138 | QHash<QByteArray, Gats::Object *>::insert( | ||
139 | sKey, new Gats::Float( d ) | ||
140 | ); | ||
141 | } | ||
142 | |||
143 | void Gats::Dictionary::insert( const QByteArray &sKey, double d ) | ||
144 | { | ||
145 | QHash<QByteArray, Gats::Object *>::insert( | ||
146 | sKey, new Gats::Float( d ) | ||
147 | ); | ||
148 | } | ||
149 | |||
150 | void Gats::Dictionary::insert( const QByteArray &sKey, const char *s ) | ||
151 | { | ||
152 | QHash<QByteArray, Gats::Object *>::insert( | ||
153 | sKey, new Gats::String( s ) | ||
154 | ); | ||
155 | } | ||
156 | |||
157 | void Gats::Dictionary::insert( const QByteArray &sKey, const QByteArray &s ) | ||
158 | { | ||
159 | QHash<QByteArray, Gats::Object *>::insert( | ||
160 | sKey, new Gats::String( s ) | ||
161 | ); | ||
162 | } | ||
163 | |||
164 | void Gats::Dictionary::insertBool( const QByteArray &sKey, bool b ) | ||
165 | { | ||
166 | QHash<QByteArray, Gats::Object *>::insert( | ||
167 | sKey, new Gats::Boolean( b ) | ||
168 | ); | ||
169 | } | ||
170 | |||
171 | void Gats::Dictionary::insertInt( const QByteArray &sKey, int64_t i ) | ||
172 | { | ||
173 | QHash<QByteArray, Gats::Object *>::insert( | ||
174 | sKey, new Gats::Integer( i ) | ||
175 | ); | ||
176 | } | ||
177 | |||
178 | void Gats::Dictionary::insertFloat( const QByteArray &sKey, double d ) | ||
179 | { | ||
180 | QHash<QByteArray, Gats::Object *>::insert( | ||
181 | sKey, new Gats::Float( d ) | ||
182 | ); | ||
183 | } | ||
184 | |||
185 | void Gats::Dictionary::insertStr( const QByteArray &sKey, const QByteArray &s ) | ||
186 | { | ||
187 | QHash<QByteArray, Gats::Object *>::insert( | ||
188 | sKey, new Gats::String( s ) | ||
189 | ); | ||
190 | } | ||
191 | |||
192 | void Gats::Dictionary::insertList( const QByteArray &sKey, Gats::List *pL ) | ||
193 | { | ||
194 | QHash<QByteArray, Gats::Object *>::insert( | ||
195 | sKey, pL | ||
196 | ); | ||
197 | } | ||
198 | |||
199 | void Gats::Dictionary::insertDict( const QByteArray &sKey, | ||
200 | Gats::Dictionary *pD ) | ||
201 | { | ||
202 | QHash<QByteArray, Gats::Object *>::insert( | ||
203 | sKey, pD | ||
204 | ); | ||
205 | } | ||
206 | |||
207 | Gats::List *Gats::Dictionary::insertList( const QByteArray &sKey ) | ||
208 | { | ||
209 | Gats::List *pLst = new Gats::List(); | ||
210 | insertList( sKey, pLst ); | ||
211 | return pLst; | ||
212 | } | ||
213 | |||
214 | Gats::Dictionary *Gats::Dictionary::insertDict( const QByteArray &sKey ) | ||
215 | { | ||
216 | Gats::Dictionary *pDict = new Gats::Dictionary(); | ||
217 | insertDict( sKey, pDict ); | ||
218 | return pDict; | ||
219 | } | ||
220 | |||
221 | bool Gats::Dictionary::valueBool( const QByteArray &sKey ) | ||
222 | { | ||
223 | Gats::Boolean *pOb = dynamic_cast<Gats::Boolean *>( value( sKey ) ); | ||
224 | if( !pOb ) | ||
225 | throw "PUT GOOD EXCEPTION HERE"; | ||
226 | |||
227 | return pOb->getValue(); | ||
228 | } | ||
229 | |||
230 | int64_t Gats::Dictionary::valueInt( const QByteArray &sKey ) | ||
231 | { | ||
232 | Gats::Integer *pOb = dynamic_cast<Gats::Integer *>( value( sKey ) ); | ||
233 | if( !pOb ) | ||
234 | throw "PUT GOOD EXCEPTION HERE"; | ||
235 | |||
236 | return pOb->getValue(); | ||
237 | } | ||
238 | |||
239 | double Gats::Dictionary::valueFloat( const QByteArray &sKey ) | ||
240 | { | ||
241 | Gats::Float *pOb = dynamic_cast<Gats::Float *>( value( sKey ) ); | ||
242 | if( !pOb ) | ||
243 | throw "PUT GOOD EXCEPTION HERE"; | ||
244 | |||
245 | return pOb->getValue(); | ||
246 | } | ||
247 | |||
248 | QByteArray Gats::Dictionary::valueStr( const QByteArray &sKey ) | ||
249 | { | ||
250 | Gats::String *pOb = dynamic_cast<Gats::String *>( value( sKey ) ); | ||
251 | if( !pOb ) | ||
252 | throw "PUT GOOD EXCEPTION HERE"; | ||
253 | |||
254 | return *pOb; | ||
255 | } | ||
256 | |||
257 | Gats::List *Gats::Dictionary::valueList( const QByteArray &sKey ) | ||
258 | { | ||
259 | Gats::List *pOb = dynamic_cast<Gats::List *>( value( sKey ) ); | ||
260 | if( !pOb ) | ||
261 | throw "PUT GOOD EXCEPTION HERE"; | ||
262 | |||
263 | return pOb; | ||
264 | } | ||
265 | |||
266 | Gats::Dictionary *Gats::Dictionary::valueDict( const QByteArray &sKey ) | ||
267 | { | ||
268 | Gats::Dictionary *pOb = dynamic_cast<Gats::Dictionary *>( value( sKey ) ); | ||
269 | if( !pOb ) | ||
270 | throw "PUT GOOD EXCEPTION HERE"; | ||
271 | |||
272 | return pOb; | ||
273 | } | ||
274 | |||
275 | bool Gats::Dictionary::valueBool( const QByteArray &sKey ) const | ||
276 | { | ||
277 | Gats::Boolean *pOb = dynamic_cast<Gats::Boolean *>( value( sKey ) ); | ||
278 | if( !pOb ) | ||
279 | throw "PUT GOOD EXCEPTION HERE"; | ||
280 | |||
281 | return pOb->getValue(); | ||
282 | } | ||
283 | |||
284 | int64_t Gats::Dictionary::valueInt( const QByteArray &sKey ) const | ||
285 | { | ||
286 | Gats::Integer *pOb = dynamic_cast<Gats::Integer *>( value( sKey ) ); | ||
287 | if( !pOb ) | ||
288 | throw "PUT GOOD EXCEPTION HERE"; | ||
289 | |||
290 | return pOb->getValue(); | ||
291 | } | ||
292 | |||
293 | double Gats::Dictionary::valueFloat( const QByteArray &sKey ) const | ||
294 | { | ||
295 | Gats::Float *pOb = dynamic_cast<Gats::Float *>( value( sKey ) ); | ||
296 | if( !pOb ) | ||
297 | throw "PUT GOOD EXCEPTION HERE"; | ||
298 | |||
299 | return pOb->getValue(); | ||
300 | } | ||
301 | |||
302 | QByteArray Gats::Dictionary::valueStr( const QByteArray &sKey ) const | ||
303 | { | ||
304 | Gats::String *pOb = dynamic_cast<Gats::String *>( value( sKey ) ); | ||
305 | if( !pOb ) | ||
306 | throw "PUT GOOD EXCEPTION HERE"; | ||
307 | |||
308 | return *pOb; | ||
309 | } | ||
310 | |||
311 | Gats::List *Gats::Dictionary::valueList( const QByteArray &sKey ) const | ||
312 | { | ||
313 | Gats::List *pOb = dynamic_cast<Gats::List *>( value( sKey ) ); | ||
314 | if( !pOb ) | ||
315 | throw "PUT GOOD EXCEPTION HERE"; | ||
316 | |||
317 | return pOb; | ||
318 | } | ||
319 | |||
320 | Gats::Dictionary *Gats::Dictionary::valueDict( const QByteArray &sKey ) const | ||
321 | { | ||
322 | Gats::Dictionary *pOb = dynamic_cast<Gats::Dictionary *>( value( sKey ) ); | ||
323 | if( !pOb ) | ||
324 | throw "PUT GOOD EXCEPTION HERE"; | ||
325 | |||
326 | return pOb; | ||
327 | } | ||
328 | /* | ||
329 | Bu::Formatter &operator<<( Bu::Formatter &f, const Gats::Dictionary &d ) | ||
330 | { | ||
331 | f << "(dict) {"; | ||
332 | f.incIndent(); | ||
333 | int iMax = 0; | ||
334 | for( Gats::Dictionary::const_iterator i = d.begin(); i; i++ ) | ||
335 | { | ||
336 | if( i.valueKey().valueSize() > iMax ) | ||
337 | iMax = i.valueKey().valueSize(); | ||
338 | } | ||
339 | iMax += 2; | ||
340 | for( Gats::Dictionary::const_iterator i = d.begin(); i; i++ ) | ||
341 | { | ||
342 | f << f.nl << Bu::Fmt( iMax ) << i.valueKey() + ": " << *i.getValue(); | ||
343 | } | ||
344 | f.decIndent(); | ||
345 | f << f.nl << "}"; | ||
346 | |||
347 | return f; | ||
348 | } | ||
349 | */ | ||