diff options
47 files changed, 931 insertions, 929 deletions
diff --git a/src/archival.cpp b/src/archival.cpp index daec60a..cae183a 100644 --- a/src/archival.cpp +++ b/src/archival.cpp | |||
@@ -15,3 +15,21 @@ Bu::Archival::~Archival() | |||
15 | { | 15 | { |
16 | } | 16 | } |
17 | 17 | ||
18 | Bu::ArchiveBase &Bu::operator<<(Bu::ArchiveBase &s, const Bu::Archival &p) | ||
19 | { | ||
20 | const_cast<Bu::Archival &>(p).archive( s ); | ||
21 | return s; | ||
22 | } | ||
23 | |||
24 | Bu::ArchiveBase &Bu::operator<<(Bu::ArchiveBase &s, Bu::Archival &p) | ||
25 | { | ||
26 | p.archive( s ); | ||
27 | return s; | ||
28 | } | ||
29 | |||
30 | Bu::ArchiveBase &Bu::operator>>(Bu::ArchiveBase &s, Bu::Archival &p) | ||
31 | { | ||
32 | p.archive( s ); | ||
33 | return s; | ||
34 | } | ||
35 | |||
diff --git a/src/archival.h b/src/archival.h index d758f3d..76f0f5f 100644 --- a/src/archival.h +++ b/src/archival.h | |||
@@ -8,6 +8,8 @@ | |||
8 | #ifndef BU_ARCHIVAL_H | 8 | #ifndef BU_ARCHIVAL_H |
9 | #define BU_ARCHIVAL_H | 9 | #define BU_ARCHIVAL_H |
10 | 10 | ||
11 | #include "bu/archivebase.h" | ||
12 | |||
11 | namespace Bu | 13 | namespace Bu |
12 | { | 14 | { |
13 | /** | 15 | /** |
@@ -38,8 +40,13 @@ namespace Bu | |||
38 | * you are loading or saving. | 40 | * you are loading or saving. |
39 | * @param ar A reference to the Archive object to use. | 41 | * @param ar A reference to the Archive object to use. |
40 | */ | 42 | */ |
41 | virtual void archive( class Archive &ar )=0; | 43 | virtual void archive( class ArchiveBase &ar )=0; |
42 | }; | 44 | }; |
45 | |||
46 | ArchiveBase &operator<<(ArchiveBase &, const class Bu::Archival &); | ||
47 | ArchiveBase &operator<<(ArchiveBase &, class Bu::Archival &); | ||
48 | ArchiveBase &operator>>(ArchiveBase &, class Bu::Archival &); | ||
49 | |||
43 | } | 50 | } |
44 | 51 | ||
45 | #endif | 52 | #endif |
diff --git a/src/archive.cpp b/src/archive.cpp index 6bad44c..1b48ec8 100644 --- a/src/archive.cpp +++ b/src/archive.cpp | |||
@@ -46,482 +46,6 @@ bool Bu::Archive::isLoading() | |||
46 | return bLoading; | 46 | return bLoading; |
47 | } | 47 | } |
48 | 48 | ||
49 | Bu::Archive &Bu::Archive::operator<<(bool p) | ||
50 | { | ||
51 | write( &p, sizeof(p) ); | ||
52 | return *this; | ||
53 | } | ||
54 | Bu::Archive &Bu::Archive::operator<<(char p) | ||
55 | { | ||
56 | write( &p, sizeof(p) ); | ||
57 | return *this; | ||
58 | } | ||
59 | Bu::Archive &Bu::Archive::operator<<(signed char p) | ||
60 | { | ||
61 | write( &p, sizeof(p) ); | ||
62 | return *this; | ||
63 | } | ||
64 | Bu::Archive &Bu::Archive::operator<<(unsigned char p) | ||
65 | { | ||
66 | write( &p, sizeof(p) ); | ||
67 | return *this; | ||
68 | } | ||
69 | Bu::Archive &Bu::Archive::operator<<(signed short p) | ||
70 | { | ||
71 | write( &p, sizeof(p) ); | ||
72 | return *this; | ||
73 | } | ||
74 | Bu::Archive &Bu::Archive::operator<<(unsigned short p) | ||
75 | { | ||
76 | write( &p, sizeof(p) ); | ||
77 | return *this; | ||
78 | } | ||
79 | Bu::Archive &Bu::Archive::operator<<(signed int p) | ||
80 | { | ||
81 | write( &p, sizeof(p) ); | ||
82 | return *this; | ||
83 | } | ||
84 | Bu::Archive &Bu::Archive::operator<<(unsigned int p) | ||
85 | { | ||
86 | write( &p, sizeof(p) ); | ||
87 | return *this; | ||
88 | } | ||
89 | Bu::Archive &Bu::Archive::operator<<(signed long p) | ||
90 | { | ||
91 | write( &p, sizeof(p) ); | ||
92 | return *this; | ||
93 | } | ||
94 | Bu::Archive &Bu::Archive::operator<<(unsigned long p) | ||
95 | { | ||
96 | write( &p, sizeof(p) ); | ||
97 | return *this; | ||
98 | } | ||
99 | Bu::Archive &Bu::Archive::operator<<(signed long long p) | ||
100 | { | ||
101 | write( &p, sizeof(p) ); | ||
102 | return *this; | ||
103 | } | ||
104 | Bu::Archive &Bu::Archive::operator<<(unsigned long long p) | ||
105 | { | ||
106 | write( &p, sizeof(p) ); | ||
107 | return *this; | ||
108 | } | ||
109 | Bu::Archive &Bu::Archive::operator<<(float p) | ||
110 | { | ||
111 | write( &p, sizeof(p) ); | ||
112 | return *this; | ||
113 | } | ||
114 | Bu::Archive &Bu::Archive::operator<<(double p) | ||
115 | { | ||
116 | write( &p, sizeof(p) ); | ||
117 | return *this; | ||
118 | } | ||
119 | Bu::Archive &Bu::Archive::operator<<(long double p) | ||
120 | { | ||
121 | write( &p, sizeof(p) ); | ||
122 | return *this; | ||
123 | } | ||
124 | |||
125 | Bu::Archive &Bu::Archive::operator>>(bool &p) | ||
126 | { | ||
127 | read( &p, sizeof(p) ); | ||
128 | return *this; | ||
129 | } | ||
130 | Bu::Archive &Bu::Archive::operator>>(char &p) | ||
131 | { | ||
132 | read( &p, sizeof(p) ); | ||
133 | return *this; | ||
134 | } | ||
135 | Bu::Archive &Bu::Archive::operator>>(signed char &p) | ||
136 | { | ||
137 | read( &p, sizeof(p) ); | ||
138 | return *this; | ||
139 | } | ||
140 | Bu::Archive &Bu::Archive::operator>>(unsigned char &p) | ||
141 | { | ||
142 | read( &p, sizeof(p) ); | ||
143 | return *this; | ||
144 | } | ||
145 | Bu::Archive &Bu::Archive::operator>>(signed short &p) | ||
146 | { | ||
147 | read( &p, sizeof(p) ); | ||
148 | return *this; | ||
149 | } | ||
150 | Bu::Archive &Bu::Archive::operator>>(unsigned short &p) | ||
151 | { | ||
152 | read( &p, sizeof(p) ); | ||
153 | return *this; | ||
154 | } | ||
155 | Bu::Archive &Bu::Archive::operator>>(signed int &p) | ||
156 | { | ||
157 | read( &p, sizeof(p) ); | ||
158 | return *this; | ||
159 | } | ||
160 | Bu::Archive &Bu::Archive::operator>>(unsigned int &p) | ||
161 | { | ||
162 | read( &p, sizeof(p) ); | ||
163 | return *this; | ||
164 | } | ||
165 | Bu::Archive &Bu::Archive::operator>>(signed long &p) | ||
166 | { | ||
167 | read( &p, sizeof(p) ); | ||
168 | return *this; | ||
169 | } | ||
170 | Bu::Archive &Bu::Archive::operator>>(unsigned long &p) | ||
171 | { | ||
172 | read( &p, sizeof(p) ); | ||
173 | return *this; | ||
174 | } | ||
175 | Bu::Archive &Bu::Archive::operator>>(signed long long &p) | ||
176 | { | ||
177 | read( &p, sizeof(p) ); | ||
178 | return *this; | ||
179 | } | ||
180 | Bu::Archive &Bu::Archive::operator>>(unsigned long long &p) | ||
181 | { | ||
182 | read( &p, sizeof(p) ); | ||
183 | return *this; | ||
184 | } | ||
185 | Bu::Archive &Bu::Archive::operator>>(float &p) | ||
186 | { | ||
187 | read( &p, sizeof(p) ); | ||
188 | return *this; | ||
189 | } | ||
190 | Bu::Archive &Bu::Archive::operator>>(double &p) | ||
191 | { | ||
192 | read( &p, sizeof(p) ); | ||
193 | return *this; | ||
194 | } | ||
195 | Bu::Archive &Bu::Archive::operator>>(long double &p) | ||
196 | { | ||
197 | read( &p, sizeof(p) ); | ||
198 | return *this; | ||
199 | } | ||
200 | |||
201 | /* | ||
202 | Bu::Archive &Bu::Archive::operator<<(bool p) | ||
203 | { | ||
204 | write( &p, sizeof(p) ); | ||
205 | return *this; | ||
206 | } | ||
207 | Bu::Archive &Bu::Archive::operator<<(int8_t p) | ||
208 | { | ||
209 | write( &p, sizeof(p) ); | ||
210 | return *this; | ||
211 | } | ||
212 | Bu::Archive &Bu::Archive::operator<<(int16_t p) | ||
213 | { | ||
214 | write( &p, sizeof(p) ); | ||
215 | return *this; | ||
216 | } | ||
217 | Bu::Archive &Bu::Archive::operator<<(int32_t p) | ||
218 | { | ||
219 | write( &p, sizeof(p) ); | ||
220 | return *this; | ||
221 | } | ||
222 | Bu::Archive &Bu::Archive::operator<<(int64_t p) | ||
223 | { | ||
224 | write( &p, sizeof(p) ); | ||
225 | return *this; | ||
226 | } | ||
227 | Bu::Archive &Bu::Archive::operator<<(uint8_t p) | ||
228 | { | ||
229 | write( &p, sizeof(p) ); | ||
230 | return *this; | ||
231 | } | ||
232 | Bu::Archive &Bu::Archive::operator<<(uint16_t p) | ||
233 | { | ||
234 | write( &p, sizeof(p) ); | ||
235 | return *this; | ||
236 | } | ||
237 | Bu::Archive &Bu::Archive::operator<<(uint32_t p) | ||
238 | { | ||
239 | write( &p, sizeof(p) ); | ||
240 | return *this; | ||
241 | } | ||
242 | Bu::Archive &Bu::Archive::operator<<(uint64_t p) | ||
243 | { | ||
244 | write( &p, sizeof(p) ); | ||
245 | return *this; | ||
246 | } | ||
247 | Bu::Archive &Bu::Archive::operator<<(long p) | ||
248 | { | ||
249 | write( &p, sizeof(p) ); | ||
250 | return *this; | ||
251 | } | ||
252 | Bu::Archive &Bu::Archive::operator<<(float p) | ||
253 | { | ||
254 | write( &p, sizeof(p) ); | ||
255 | return *this; | ||
256 | } | ||
257 | Bu::Archive &Bu::Archive::operator<<(double p) | ||
258 | { | ||
259 | write( &p, sizeof(p) ); | ||
260 | return *this; | ||
261 | } | ||
262 | Bu::Archive &Bu::Archive::operator<<(long double p) | ||
263 | { | ||
264 | write( &p, sizeof(p) ); | ||
265 | return *this; | ||
266 | } | ||
267 | |||
268 | Bu::Archive &Bu::Archive::operator>>(bool &p) | ||
269 | { | ||
270 | read( &p, sizeof(p) ); | ||
271 | return *this; | ||
272 | } | ||
273 | Bu::Archive &Bu::Archive::operator>>(int8_t &p) | ||
274 | { | ||
275 | read( &p, sizeof(p) ); | ||
276 | return *this; | ||
277 | } | ||
278 | Bu::Archive &Bu::Archive::operator>>(int16_t &p) | ||
279 | { | ||
280 | read( &p, sizeof(p) ); | ||
281 | return *this; | ||
282 | } | ||
283 | Bu::Archive &Bu::Archive::operator>>(int32_t &p) | ||
284 | { | ||
285 | read( &p, sizeof(p) ); | ||
286 | return *this; | ||
287 | } | ||
288 | Bu::Archive &Bu::Archive::operator>>(int64_t &p) | ||
289 | { | ||
290 | read( &p, sizeof(p) ); | ||
291 | return *this; | ||
292 | } | ||
293 | Bu::Archive &Bu::Archive::operator>>(uint8_t &p) | ||
294 | { | ||
295 | read( &p, sizeof(p) ); | ||
296 | return *this; | ||
297 | } | ||
298 | Bu::Archive &Bu::Archive::operator>>(uint16_t &p) | ||
299 | { | ||
300 | read( &p, sizeof(p) ); | ||
301 | return *this; | ||
302 | } | ||
303 | Bu::Archive &Bu::Archive::operator>>(uint32_t &p) | ||
304 | { | ||
305 | read( &p, sizeof(p) ); | ||
306 | return *this; | ||
307 | } | ||
308 | Bu::Archive &Bu::Archive::operator>>(uint64_t &p) | ||
309 | { | ||
310 | read( &p, sizeof(p) ); | ||
311 | return *this; | ||
312 | } | ||
313 | Bu::Archive &Bu::Archive::operator>>(long &p) | ||
314 | { | ||
315 | read( &p, sizeof(p) ); | ||
316 | return *this; | ||
317 | } | ||
318 | Bu::Archive &Bu::Archive::operator>>(float &p) | ||
319 | { | ||
320 | read( &p, sizeof(p) ); | ||
321 | return *this; | ||
322 | } | ||
323 | Bu::Archive &Bu::Archive::operator>>(double &p) | ||
324 | { | ||
325 | read( &p, sizeof(p) ); | ||
326 | return *this; | ||
327 | } | ||
328 | Bu::Archive &Bu::Archive::operator>>(long double &p) | ||
329 | { | ||
330 | read( &p, sizeof(p) ); | ||
331 | return *this; | ||
332 | } | ||
333 | |||
334 | Bu::Archive &Bu::Archive::operator&&(bool &p) | ||
335 | { | ||
336 | if (bLoading) | ||
337 | { | ||
338 | return *this >> p; | ||
339 | } | ||
340 | else | ||
341 | { | ||
342 | return *this << p; | ||
343 | } | ||
344 | } | ||
345 | |||
346 | Bu::Archive &Bu::Archive::operator&&(int8_t &p) | ||
347 | { | ||
348 | if (bLoading) | ||
349 | { | ||
350 | return *this >> p; | ||
351 | } | ||
352 | else | ||
353 | { | ||
354 | return *this << p; | ||
355 | } | ||
356 | } | ||
357 | |||
358 | Bu::Archive &Bu::Archive::operator&&(int16_t &p) | ||
359 | { | ||
360 | if (bLoading) | ||
361 | { | ||
362 | return *this >> p; | ||
363 | } | ||
364 | else | ||
365 | { | ||
366 | return *this << p; | ||
367 | } | ||
368 | } | ||
369 | |||
370 | Bu::Archive &Bu::Archive::operator&&(int32_t &p) | ||
371 | { | ||
372 | if (bLoading) | ||
373 | { | ||
374 | return *this >> p; | ||
375 | } | ||
376 | else | ||
377 | { | ||
378 | return *this << p; | ||
379 | } | ||
380 | } | ||
381 | |||
382 | Bu::Archive &Bu::Archive::operator&&(int64_t &p) | ||
383 | { | ||
384 | if (bLoading) | ||
385 | { | ||
386 | return *this >> p; | ||
387 | } | ||
388 | else | ||
389 | { | ||
390 | return *this << p; | ||
391 | } | ||
392 | } | ||
393 | |||
394 | Bu::Archive &Bu::Archive::operator&&(uint8_t &p) | ||
395 | { | ||
396 | if (bLoading) | ||
397 | { | ||
398 | return *this >> p; | ||
399 | } | ||
400 | else | ||
401 | { | ||
402 | return *this << p; | ||
403 | } | ||
404 | } | ||
405 | |||
406 | Bu::Archive &Bu::Archive::operator&&(uint16_t &p) | ||
407 | { | ||
408 | if (bLoading) | ||
409 | { | ||
410 | return *this >> p; | ||
411 | } | ||
412 | else | ||
413 | { | ||
414 | return *this << p; | ||
415 | } | ||
416 | } | ||
417 | |||
418 | Bu::Archive &Bu::Archive::operator&&(uint32_t &p) | ||
419 | { | ||
420 | if (bLoading) | ||
421 | { | ||
422 | return *this >> p; | ||
423 | } | ||
424 | else | ||
425 | { | ||
426 | return *this << p; | ||
427 | } | ||
428 | } | ||
429 | |||
430 | Bu::Archive &Bu::Archive::operator&&(uint64_t &p) | ||
431 | { | ||
432 | if (bLoading) | ||
433 | { | ||
434 | return *this >> p; | ||
435 | } | ||
436 | else | ||
437 | { | ||
438 | return *this << p; | ||
439 | } | ||
440 | } | ||
441 | |||
442 | Bu::Archive &Bu::Archive::operator&&(float &p) | ||
443 | { | ||
444 | if (bLoading) | ||
445 | { | ||
446 | return *this >> p; | ||
447 | } | ||
448 | else | ||
449 | { | ||
450 | return *this << p; | ||
451 | } | ||
452 | } | ||
453 | |||
454 | Bu::Archive &Bu::Archive::operator&&(double &p) | ||
455 | { | ||
456 | if (bLoading) | ||
457 | { | ||
458 | return *this >> p; | ||
459 | } | ||
460 | else | ||
461 | { | ||
462 | return *this << p; | ||
463 | } | ||
464 | } | ||
465 | |||
466 | Bu::Archive &Bu::Archive::operator&&(long double &p) | ||
467 | { | ||
468 | if (bLoading) | ||
469 | { | ||
470 | return *this >> p; | ||
471 | } | ||
472 | else | ||
473 | { | ||
474 | return *this << p; | ||
475 | } | ||
476 | } | ||
477 | */ | ||
478 | |||
479 | Bu::Archive &Bu::operator<<(Bu::Archive &s, Bu::Archival &p) | ||
480 | { | ||
481 | p.archive( s ); | ||
482 | return s; | ||
483 | } | ||
484 | |||
485 | Bu::Archive &Bu::operator>>(Bu::Archive &s, Bu::Archival &p) | ||
486 | { | ||
487 | p.archive( s ); | ||
488 | return s; | ||
489 | } | ||
490 | |||
491 | Bu::Archive &Bu::operator<<(Bu::Archive &ar, class Bu::Archival *p ) | ||
492 | { | ||
493 | ar << *p; | ||
494 | return ar; | ||
495 | } | ||
496 | |||
497 | Bu::Archive &Bu::operator>>(Bu::Archive &ar, class Bu::Archival *p ) | ||
498 | { | ||
499 | ar >> *p; | ||
500 | return ar; | ||
501 | } | ||
502 | |||
503 | Bu::Archive &Bu::operator<<( Bu::Archive &ar, std::string &s ) | ||
504 | { | ||
505 | // This should be defined as long anyway, this is just insurance | ||
506 | ar << (long)s.length(); | ||
507 | ar.write( s.c_str(), s.length() ); | ||
508 | |||
509 | return ar; | ||
510 | } | ||
511 | |||
512 | Bu::Archive &Bu::operator>>( Bu::Archive &ar, std::string &s ) | ||
513 | { | ||
514 | long l; | ||
515 | ar >> l; | ||
516 | char *tmp = new char[l+1]; | ||
517 | tmp[l] = '\0'; | ||
518 | ar.read( tmp, l ); | ||
519 | s = tmp; | ||
520 | delete[] tmp; | ||
521 | |||
522 | return ar; | ||
523 | } | ||
524 | |||
525 | uint32_t Bu::Archive::getID( const void *ptr ) | 49 | uint32_t Bu::Archive::getID( const void *ptr ) |
526 | { | 50 | { |
527 | if( hPtrID.has( (ptrdiff_t)ptr ) ) | 51 | if( hPtrID.has( (ptrdiff_t)ptr ) ) |
diff --git a/src/archive.h b/src/archive.h index dcbd219..6eaf408 100644 --- a/src/archive.h +++ b/src/archive.h | |||
@@ -9,11 +9,8 @@ | |||
9 | #define BU_ARCHIVE_H | 9 | #define BU_ARCHIVE_H |
10 | 10 | ||
11 | #include <stdint.h> | 11 | #include <stdint.h> |
12 | #include <string> | 12 | #include "bu/archivebase.h" |
13 | #include <list> | ||
14 | #include "bu/hash.h" | 13 | #include "bu/hash.h" |
15 | #include "bu/list.h" | ||
16 | //#include "bu/set.h" | ||
17 | #include "bu/util.h" | 14 | #include "bu/util.h" |
18 | 15 | ||
19 | namespace Bu | 16 | namespace Bu |
@@ -68,7 +65,7 @@ namespace Bu | |||
68 | * One way of dealing with the latter problem is to make sure and use | 65 | * One way of dealing with the latter problem is to make sure and use |
69 | * explicit primitive types from the stdint.h header, i.e. int32_t. | 66 | * explicit primitive types from the stdint.h header, i.e. int32_t. |
70 | */ | 67 | */ |
71 | class Archive | 68 | class Archive : public ArchiveBase |
72 | { | 69 | { |
73 | private: | 70 | private: |
74 | bool bLoading; | 71 | bool bLoading; |
@@ -88,81 +85,6 @@ namespace Bu | |||
88 | virtual void write(const void *, int32_t); | 85 | virtual void write(const void *, int32_t); |
89 | virtual void read(void *, int32_t); | 86 | virtual void read(void *, int32_t); |
90 | 87 | ||
91 | virtual Archive &operator<<(bool p); | ||
92 | virtual Archive &operator<<(char p); | ||
93 | virtual Archive &operator<<(signed char p); | ||
94 | virtual Archive &operator<<(unsigned char p); | ||
95 | virtual Archive &operator<<(signed short p); | ||
96 | virtual Archive &operator<<(unsigned short p); | ||
97 | virtual Archive &operator<<(signed int p); | ||
98 | virtual Archive &operator<<(unsigned int p); | ||
99 | virtual Archive &operator<<(signed long p); | ||
100 | virtual Archive &operator<<(unsigned long p); | ||
101 | virtual Archive &operator<<(signed long long p); | ||
102 | virtual Archive &operator<<(unsigned long long p); | ||
103 | virtual Archive &operator<<(float p); | ||
104 | virtual Archive &operator<<(double p); | ||
105 | virtual Archive &operator<<(long double p); | ||
106 | |||
107 | virtual Archive &operator>>(bool &p); | ||
108 | virtual Archive &operator>>(char &p); | ||
109 | virtual Archive &operator>>(signed char &p); | ||
110 | virtual Archive &operator>>(unsigned char &p); | ||
111 | virtual Archive &operator>>(signed short &p); | ||
112 | virtual Archive &operator>>(unsigned short &p); | ||
113 | virtual Archive &operator>>(signed int &p); | ||
114 | virtual Archive &operator>>(unsigned int &p); | ||
115 | virtual Archive &operator>>(signed long &p); | ||
116 | virtual Archive &operator>>(unsigned long &p); | ||
117 | virtual Archive &operator>>(signed long long &p); | ||
118 | virtual Archive &operator>>(unsigned long long &p); | ||
119 | virtual Archive &operator>>(float &p); | ||
120 | virtual Archive &operator>>(double &p); | ||
121 | virtual Archive &operator>>(long double &p); | ||
122 | |||
123 | /* | ||
124 | virtual Archive &operator<<(bool); | ||
125 | virtual Archive &operator<<(int8_t); | ||
126 | virtual Archive &operator<<(int16_t); | ||
127 | virtual Archive &operator<<(int32_t); | ||
128 | virtual Archive &operator<<(int64_t); | ||
129 | virtual Archive &operator<<(uint8_t); | ||
130 | virtual Archive &operator<<(uint16_t); | ||
131 | virtual Archive &operator<<(uint32_t); | ||
132 | virtual Archive &operator<<(uint64_t); | ||
133 | // virtual Archive &operator<<(long); | ||
134 | virtual Archive &operator<<(float); | ||
135 | virtual Archive &operator<<(double); | ||
136 | virtual Archive &operator<<(long double); | ||
137 | |||
138 | virtual Archive &operator>>(bool &); | ||
139 | virtual Archive &operator>>(int8_t &); | ||
140 | virtual Archive &operator>>(int16_t &); | ||
141 | virtual Archive &operator>>(int32_t &); | ||
142 | virtual Archive &operator>>(int64_t &); | ||
143 | virtual Archive &operator>>(uint8_t &); | ||
144 | virtual Archive &operator>>(uint16_t &); | ||
145 | virtual Archive &operator>>(uint32_t &); | ||
146 | virtual Archive &operator>>(uint64_t &); | ||
147 | // virtual Archive &operator>>(long &); | ||
148 | virtual Archive &operator>>(float &); | ||
149 | virtual Archive &operator>>(double &); | ||
150 | virtual Archive &operator>>(long double &); | ||
151 | |||
152 | virtual Archive &operator&&(bool &); | ||
153 | virtual Archive &operator&&(int8_t &); | ||
154 | virtual Archive &operator&&(int16_t &); | ||
155 | virtual Archive &operator&&(int32_t &); | ||
156 | virtual Archive &operator&&(int64_t &); | ||
157 | virtual Archive &operator&&(uint8_t &); | ||
158 | virtual Archive &operator&&(uint16_t &); | ||
159 | virtual Archive &operator&&(uint32_t &); | ||
160 | virtual Archive &operator&&(uint64_t &); | ||
161 | virtual Archive &operator&&(float &); | ||
162 | virtual Archive &operator&&(double &); | ||
163 | virtual Archive &operator&&(long double &); | ||
164 | */ | ||
165 | |||
166 | /** | 88 | /** |
167 | * For storage, get an ID for the pointer to the object you're going to | 89 | * For storage, get an ID for the pointer to the object you're going to |
168 | * write. | 90 | * write. |
@@ -193,176 +115,6 @@ namespace Bu | |||
193 | Hash<uint32_t,uint32_t> hPtrID; | 115 | Hash<uint32_t,uint32_t> hPtrID; |
194 | Hash<uint32_t,List<void **> > hPtrDest; | 116 | Hash<uint32_t,List<void **> > hPtrDest; |
195 | }; | 117 | }; |
196 | |||
197 | Archive &operator<<(Archive &, class Bu::Archival &); | ||
198 | Archive &operator>>(Archive &, class Bu::Archival &); | ||
199 | //Archive &operator&&(Archive &s, class Bu::Archival &p); | ||
200 | |||
201 | Archive &operator<<(Archive &, std::string &); | ||
202 | Archive &operator>>(Archive &, std::string &); | ||
203 | //Archive &operator&&(Archive &, std::string &); | ||
204 | |||
205 | template<typename T> Archive &operator&&( Archive &ar, T &dat ) | ||
206 | { | ||
207 | if( ar.isLoading() ) | ||
208 | { | ||
209 | return ar >> dat; | ||
210 | } | ||
211 | else | ||
212 | { | ||
213 | return ar << dat; | ||
214 | } | ||
215 | } | ||
216 | |||
217 | template<typename T> Archive &operator<<( Archive &ar, std::list<T> &l ) | ||
218 | { | ||
219 | typename std::list<T>::size_type num = l.getSize(); | ||
220 | ar << num; | ||
221 | for( typename std::list<T>::const_iterator i = l.begin(); i != l.end(); | ||
222 | i++ ) | ||
223 | { | ||
224 | ar << *i; | ||
225 | } | ||
226 | |||
227 | return ar; | ||
228 | } | ||
229 | |||
230 | template<typename T> Archive &operator>>( Archive &ar, std::list<T> &l ) | ||
231 | { | ||
232 | typename std::list<T>::size_type num; | ||
233 | ar >> num; | ||
234 | |||
235 | l.resize( num ); | ||
236 | for( typename std::list<T>::const_iterator i = l.begin(); | ||
237 | i != l.end(); i++ ) | ||
238 | { | ||
239 | ar >> *i; | ||
240 | } | ||
241 | |||
242 | return ar; | ||
243 | } | ||
244 | |||
245 | Archive &operator<<(Archive &, class Bu::Archival *p); | ||
246 | Archive &operator>>(Archive &, class Bu::Archival *p); | ||
247 | |||
248 | template<typename key, typename value> | ||
249 | Archive &operator<<( Archive &ar, Hash<key,value> &h ) | ||
250 | { | ||
251 | ar << h.getSize(); | ||
252 | for( typename Hash<key,value>::iterator i = h.begin(); i != h.end(); i++ ) | ||
253 | { | ||
254 | //std::pair<key,value> p = *i; | ||
255 | ar << (i.getKey()) << (i.getValue()); | ||
256 | } | ||
257 | |||
258 | return ar; | ||
259 | } | ||
260 | |||
261 | template<typename key, typename value> | ||
262 | Archive &operator>>( Archive &ar, Hash<key,value> &h ) | ||
263 | { | ||
264 | h.clear(); | ||
265 | long nSize; | ||
266 | ar >> nSize; | ||
267 | |||
268 | for( long j = 0; j < nSize; j++ ) | ||
269 | { | ||
270 | key k; value v; | ||
271 | ar >> k >> v; | ||
272 | h.insert( k, v ); | ||
273 | } | ||
274 | |||
275 | return ar; | ||
276 | } | ||
277 | |||
278 | template<typename value> | ||
279 | Archive &operator<<( Archive &ar, List<value> &h ) | ||
280 | { | ||
281 | ar << h.getSize(); | ||
282 | for( typename List<value>::iterator i = h.begin(); i != h.end(); i++ ) | ||
283 | { | ||
284 | ar << (*i); | ||
285 | } | ||
286 | |||
287 | return ar; | ||
288 | } | ||
289 | |||
290 | template<typename value> | ||
291 | Archive &operator>>( Archive &ar, List<value> &h ) | ||
292 | { | ||
293 | h.clear(); | ||
294 | long nSize; | ||
295 | ar >> nSize; | ||
296 | |||
297 | for( long j = 0; j < nSize; j++ ) | ||
298 | { | ||
299 | value v; | ||
300 | ar >> v; | ||
301 | h.append( v ); | ||
302 | } | ||
303 | |||
304 | return ar; | ||
305 | } | ||
306 | |||
307 | template<typename value, int inc, typename valuealloc> class Array; | ||
308 | template<typename value, int inc, typename valuealloc> | ||
309 | Archive &operator<<( Archive &ar, Array<value, inc, valuealloc> &h ) | ||
310 | { | ||
311 | ar << h.getSize(); | ||
312 | for( typename Array<value, inc, valuealloc>::iterator i = h.begin(); i != h.end(); i++ ) | ||
313 | { | ||
314 | ar << (*i); | ||
315 | } | ||
316 | |||
317 | return ar; | ||
318 | } | ||
319 | |||
320 | template<typename value, int inc, typename valuealloc> | ||
321 | Archive &operator>>(Archive &ar, Array<value, inc, valuealloc> &h ) | ||
322 | { | ||
323 | h.clear(); | ||
324 | long nSize; | ||
325 | ar >> nSize; | ||
326 | |||
327 | h.setCapacity( nSize ); | ||
328 | for( long j = 0; j < nSize; j++ ) | ||
329 | { | ||
330 | value v; | ||
331 | ar >> v; | ||
332 | h.append( v ); | ||
333 | } | ||
334 | return ar; | ||
335 | } | ||
336 | |||
337 | template<typename key, typename b, typename c, typename d> class Set; | ||
338 | template<typename key, typename b, typename c, typename d> | ||
339 | Archive &operator<<( Archive &ar, Set<key, b, c, d> &h ) | ||
340 | { | ||
341 | ar << h.getSize(); | ||
342 | for( typename Set<key, b, c, d>::iterator i = h.begin(); i != h.end(); i++ ) | ||
343 | { | ||
344 | ar << (*i); | ||
345 | } | ||
346 | |||
347 | return ar; | ||
348 | } | ||
349 | |||
350 | template<typename key, typename b, typename c, typename d> | ||
351 | Archive &operator>>( Archive &ar, Set<key, b, c, d> &h ) | ||
352 | { | ||
353 | h.clear(); | ||
354 | long nSize; | ||
355 | ar >> nSize; | ||
356 | |||
357 | for( long j = 0; j < nSize; j++ ) | ||
358 | { | ||
359 | key v; | ||
360 | ar >> v; | ||
361 | h.insert( v ); | ||
362 | } | ||
363 | |||
364 | return ar; | ||
365 | } | ||
366 | } | 118 | } |
367 | 119 | ||
368 | #endif | 120 | #endif |
diff --git a/src/archivebase.cpp b/src/archivebase.cpp new file mode 100644 index 0000000..41b7ebe --- /dev/null +++ b/src/archivebase.cpp | |||
@@ -0,0 +1,190 @@ | |||
1 | #include "bu/archivebase.h" | ||
2 | |||
3 | Bu::ArchiveBase::ArchiveBase() | ||
4 | { | ||
5 | } | ||
6 | |||
7 | Bu::ArchiveBase::~ArchiveBase() | ||
8 | { | ||
9 | } | ||
10 | |||
11 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, bool p) | ||
12 | { | ||
13 | ar.write( &p, sizeof(p) ); | ||
14 | return ar; | ||
15 | } | ||
16 | |||
17 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, char p) | ||
18 | { | ||
19 | ar.write( &p, sizeof(p) ); | ||
20 | return ar; | ||
21 | } | ||
22 | |||
23 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed char p) | ||
24 | { | ||
25 | ar.write( &p, sizeof(p) ); | ||
26 | return ar; | ||
27 | } | ||
28 | |||
29 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned char p) | ||
30 | { | ||
31 | ar.write( &p, sizeof(p) ); | ||
32 | return ar; | ||
33 | } | ||
34 | |||
35 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed short p) | ||
36 | { | ||
37 | ar.write( &p, sizeof(p) ); | ||
38 | return ar; | ||
39 | } | ||
40 | |||
41 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned short p) | ||
42 | { | ||
43 | ar.write( &p, sizeof(p) ); | ||
44 | return ar; | ||
45 | } | ||
46 | |||
47 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed int p) | ||
48 | { | ||
49 | ar.write( &p, sizeof(p) ); | ||
50 | return ar; | ||
51 | } | ||
52 | |||
53 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned int p) | ||
54 | { | ||
55 | ar.write( &p, sizeof(p) ); | ||
56 | return ar; | ||
57 | } | ||
58 | |||
59 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed long p) | ||
60 | { | ||
61 | ar.write( &p, sizeof(p) ); | ||
62 | return ar; | ||
63 | } | ||
64 | |||
65 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned long p) | ||
66 | { | ||
67 | ar.write( &p, sizeof(p) ); | ||
68 | return ar; | ||
69 | } | ||
70 | |||
71 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, signed long long p) | ||
72 | { | ||
73 | ar.write( &p, sizeof(p) ); | ||
74 | return ar; | ||
75 | } | ||
76 | |||
77 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, unsigned long long p) | ||
78 | { | ||
79 | ar.write( &p, sizeof(p) ); | ||
80 | return ar; | ||
81 | } | ||
82 | |||
83 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, float p) | ||
84 | { | ||
85 | ar.write( &p, sizeof(p) ); | ||
86 | return ar; | ||
87 | } | ||
88 | |||
89 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, double p) | ||
90 | { | ||
91 | ar.write( &p, sizeof(p) ); | ||
92 | return ar; | ||
93 | } | ||
94 | |||
95 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, long double p) | ||
96 | { | ||
97 | ar.write( &p, sizeof(p) ); | ||
98 | return ar; | ||
99 | } | ||
100 | |||
101 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, bool &p) | ||
102 | { | ||
103 | ar.read( &p, sizeof(p) ); | ||
104 | return ar; | ||
105 | } | ||
106 | |||
107 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, char &p) | ||
108 | { | ||
109 | ar.read( &p, sizeof(p) ); | ||
110 | return ar; | ||
111 | } | ||
112 | |||
113 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed char &p) | ||
114 | { | ||
115 | ar.read( &p, sizeof(p) ); | ||
116 | return ar; | ||
117 | } | ||
118 | |||
119 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned char &p) | ||
120 | { | ||
121 | ar.read( &p, sizeof(p) ); | ||
122 | return ar; | ||
123 | } | ||
124 | |||
125 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed short &p) | ||
126 | { | ||
127 | ar.read( &p, sizeof(p) ); | ||
128 | return ar; | ||
129 | } | ||
130 | |||
131 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned short &p) | ||
132 | { | ||
133 | ar.read( &p, sizeof(p) ); | ||
134 | return ar; | ||
135 | } | ||
136 | |||
137 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed int &p) | ||
138 | { | ||
139 | ar.read( &p, sizeof(p) ); | ||
140 | return ar; | ||
141 | } | ||
142 | |||
143 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned int &p) | ||
144 | { | ||
145 | ar.read( &p, sizeof(p) ); | ||
146 | return ar; | ||
147 | } | ||
148 | |||
149 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed long &p) | ||
150 | { | ||
151 | ar.read( &p, sizeof(p) ); | ||
152 | return ar; | ||
153 | } | ||
154 | |||
155 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned long &p) | ||
156 | { | ||
157 | ar.read( &p, sizeof(p) ); | ||
158 | return ar; | ||
159 | } | ||
160 | |||
161 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, signed long long &p) | ||
162 | { | ||
163 | ar.read( &p, sizeof(p) ); | ||
164 | return ar; | ||
165 | } | ||
166 | |||
167 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, unsigned long long &p) | ||
168 | { | ||
169 | ar.read( &p, sizeof(p) ); | ||
170 | return ar; | ||
171 | } | ||
172 | |||
173 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, float &p) | ||
174 | { | ||
175 | ar.read( &p, sizeof(p) ); | ||
176 | return ar; | ||
177 | } | ||
178 | |||
179 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, double &p) | ||
180 | { | ||
181 | ar.read( &p, sizeof(p) ); | ||
182 | return ar; | ||
183 | } | ||
184 | |||
185 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, long double &p) | ||
186 | { | ||
187 | ar.read( &p, sizeof(p) ); | ||
188 | return ar; | ||
189 | } | ||
190 | |||
diff --git a/src/archivebase.h b/src/archivebase.h new file mode 100644 index 0000000..f421efb --- /dev/null +++ b/src/archivebase.h | |||
@@ -0,0 +1,67 @@ | |||
1 | #ifndef BU_ARCHIVE_BASE_H | ||
2 | #define BU_ARCHIVE_BASE_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | |||
6 | namespace Bu | ||
7 | { | ||
8 | class ArchiveBase | ||
9 | { | ||
10 | public: | ||
11 | ArchiveBase(); | ||
12 | virtual ~ArchiveBase(); | ||
13 | |||
14 | virtual void close()=0; | ||
15 | virtual void write( const void *pData, int32_t iLength )=0; | ||
16 | virtual void read( void *pData, int32_t iLength )=0; | ||
17 | virtual bool isLoading()=0; | ||
18 | }; | ||
19 | |||
20 | template<typename T> ArchiveBase &operator&&( ArchiveBase &ar, T &dat ) | ||
21 | { | ||
22 | if( ar.isLoading() ) | ||
23 | { | ||
24 | return ar >> dat; | ||
25 | } | ||
26 | else | ||
27 | { | ||
28 | return ar << dat; | ||
29 | } | ||
30 | } | ||
31 | |||
32 | ArchiveBase &operator<<( ArchiveBase &ar, bool p ); | ||
33 | ArchiveBase &operator<<( ArchiveBase &ar, char p ); | ||
34 | ArchiveBase &operator<<( ArchiveBase &ar, signed char p ); | ||
35 | ArchiveBase &operator<<( ArchiveBase &ar, unsigned char p ); | ||
36 | ArchiveBase &operator<<( ArchiveBase &ar, signed short p ); | ||
37 | ArchiveBase &operator<<( ArchiveBase &ar, unsigned short p ); | ||
38 | ArchiveBase &operator<<( ArchiveBase &ar, signed int p ); | ||
39 | ArchiveBase &operator<<( ArchiveBase &ar, unsigned int p ); | ||
40 | ArchiveBase &operator<<( ArchiveBase &ar, signed long p ); | ||
41 | ArchiveBase &operator<<( ArchiveBase &ar, unsigned long p ); | ||
42 | ArchiveBase &operator<<( ArchiveBase &ar, signed long long p ); | ||
43 | ArchiveBase &operator<<( ArchiveBase &ar, unsigned long long p ); | ||
44 | ArchiveBase &operator<<( ArchiveBase &ar, float p ); | ||
45 | ArchiveBase &operator<<( ArchiveBase &ar, double p ); | ||
46 | ArchiveBase &operator<<( ArchiveBase &ar, long double p ); | ||
47 | |||
48 | ArchiveBase &operator>>( ArchiveBase &ar, bool &p ); | ||
49 | ArchiveBase &operator>>( ArchiveBase &ar, char &p ); | ||
50 | ArchiveBase &operator>>( ArchiveBase &ar, signed char &p ); | ||
51 | ArchiveBase &operator>>( ArchiveBase &ar, unsigned char &p ); | ||
52 | ArchiveBase &operator>>( ArchiveBase &ar, signed short &p ); | ||
53 | ArchiveBase &operator>>( ArchiveBase &ar, unsigned short &p ); | ||
54 | ArchiveBase &operator>>( ArchiveBase &ar, signed int &p ); | ||
55 | ArchiveBase &operator>>( ArchiveBase &ar, unsigned int &p ); | ||
56 | ArchiveBase &operator>>( ArchiveBase &ar, signed long &p ); | ||
57 | ArchiveBase &operator>>( ArchiveBase &ar, unsigned long &p ); | ||
58 | ArchiveBase &operator>>( ArchiveBase &ar, signed long long &p ); | ||
59 | ArchiveBase &operator>>( ArchiveBase &ar, unsigned long long &p ); | ||
60 | ArchiveBase &operator>>( ArchiveBase &ar, float &p ); | ||
61 | ArchiveBase &operator>>( ArchiveBase &ar, double &p ); | ||
62 | ArchiveBase &operator>>( ArchiveBase &ar, long double &p ); | ||
63 | |||
64 | |||
65 | }; | ||
66 | |||
67 | #endif | ||
diff --git a/src/array.h b/src/array.h index ca4ec21..6279382 100644 --- a/src/array.h +++ b/src/array.h | |||
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | #include <memory> | 11 | #include <memory> |
12 | #include "bu/exceptionbase.h" | 12 | #include "bu/exceptionbase.h" |
13 | #include "bu/archivebase.h" | ||
13 | 14 | ||
14 | namespace Bu | 15 | namespace Bu |
15 | { | 16 | { |
@@ -442,6 +443,38 @@ namespace Bu | |||
442 | 443 | ||
443 | return f; | 444 | return f; |
444 | } | 445 | } |
446 | |||
447 | template<typename value, int inc, typename valuealloc> | ||
448 | ArchiveBase &operator<<( ArchiveBase &ar, | ||
449 | const Array<value, inc, valuealloc> &h ) | ||
450 | { | ||
451 | ar << h.getSize(); | ||
452 | for( typename Array<value, inc, valuealloc>::const_iterator i = | ||
453 | h.begin(); i != h.end(); i++ ) | ||
454 | { | ||
455 | ar << (*i); | ||
456 | } | ||
457 | |||
458 | return ar; | ||
459 | } | ||
460 | |||
461 | template<typename value, int inc, typename valuealloc> | ||
462 | ArchiveBase &operator>>(ArchiveBase &ar, Array<value, inc, valuealloc> &h ) | ||
463 | { | ||
464 | h.clear(); | ||
465 | long nSize; | ||
466 | ar >> nSize; | ||
467 | |||
468 | h.setCapacity( nSize ); | ||
469 | for( long j = 0; j < nSize; j++ ) | ||
470 | { | ||
471 | value v; | ||
472 | ar >> v; | ||
473 | h.append( v ); | ||
474 | } | ||
475 | return ar; | ||
476 | } | ||
477 | |||
445 | } | 478 | } |
446 | 479 | ||
447 | #endif | 480 | #endif |
diff --git a/src/cachestorenids.h b/src/cachestorenids.h index 3859900..ae2b9a2 100644 --- a/src/cachestorenids.h +++ b/src/cachestorenids.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #include "bu/cachestore.h" | 15 | #include "bu/cachestore.h" |
16 | 16 | ||
17 | #include "bu/file.h" | 17 | #include "bu/file.h" |
18 | #include "bu/archive.h" | ||
18 | 19 | ||
19 | namespace Bu | 20 | namespace Bu |
20 | { | 21 | { |
diff --git a/src/client.h b/src/client.h index 72b1b05..e91dead 100644 --- a/src/client.h +++ b/src/client.h | |||
@@ -15,6 +15,7 @@ | |||
15 | namespace Bu | 15 | namespace Bu |
16 | { | 16 | { |
17 | class Protocol; | 17 | class Protocol; |
18 | class Stream; | ||
18 | class Socket; | 19 | class Socket; |
19 | class ClientLinkFactory; | 20 | class ClientLinkFactory; |
20 | 21 | ||
diff --git a/src/exceptionbase.cpp b/src/exceptionbase.cpp index a3b10af..b3f06f4 100644 --- a/src/exceptionbase.cpp +++ b/src/exceptionbase.cpp | |||
@@ -8,6 +8,7 @@ | |||
8 | #include "exceptionbase.h" | 8 | #include "exceptionbase.h" |
9 | #include <stdarg.h> | 9 | #include <stdarg.h> |
10 | #include <string.h> | 10 | #include <string.h> |
11 | #include <stdio.h> | ||
11 | 12 | ||
12 | Bu::ExceptionBase::ExceptionBase( const char *lpFormat, ... ) throw() : | 13 | Bu::ExceptionBase::ExceptionBase( const char *lpFormat, ... ) throw() : |
13 | nErrorCode( 0 ), | 14 | nErrorCode( 0 ), |
diff --git a/src/exceptionbase.h b/src/exceptionbase.h index de63177..20e8ee1 100644 --- a/src/exceptionbase.h +++ b/src/exceptionbase.h | |||
@@ -8,7 +8,6 @@ | |||
8 | #ifndef BU_EXCEPTION_BASE_H | 8 | #ifndef BU_EXCEPTION_BASE_H |
9 | #define BU_EXCEPTION_BASE_H | 9 | #define BU_EXCEPTION_BASE_H |
10 | 10 | ||
11 | #include <string> | ||
12 | #include <exception> | 11 | #include <exception> |
13 | #include <stdarg.h> | 12 | #include <stdarg.h> |
14 | 13 | ||
diff --git a/src/fastcgi.cpp b/src/fastcgi.cpp index 3cc3a10..1662fe6 100644 --- a/src/fastcgi.cpp +++ b/src/fastcgi.cpp | |||
@@ -9,6 +9,7 @@ | |||
9 | 9 | ||
10 | #include <arpa/inet.h> | 10 | #include <arpa/inet.h> |
11 | #include <errno.h> | 11 | #include <errno.h> |
12 | #include <unistd.h> | ||
12 | 13 | ||
13 | #include "bu/membuf.h" | 14 | #include "bu/membuf.h" |
14 | 15 | ||
diff --git a/src/fbasicstring.h b/src/fbasicstring.h index 225bc80..0e63efe 100644 --- a/src/fbasicstring.h +++ b/src/fbasicstring.h | |||
@@ -15,10 +15,13 @@ | |||
15 | #include <wordexp.h> | 15 | #include <wordexp.h> |
16 | #endif | 16 | #endif |
17 | 17 | ||
18 | #include "bu/archival.h" | ||
19 | #include "bu/archive.h" | ||
20 | #include "bu/util.h" | 18 | #include "bu/util.h" |
21 | #include "bu/sharedcore.h" | 19 | #include "bu/sharedcore.h" |
20 | #include "bu/exceptionbase.h" | ||
21 | #include "bu/archivebase.h" | ||
22 | #include "bu/list.h" | ||
23 | |||
24 | #include <string.h> | ||
22 | 25 | ||
23 | namespace Bu | 26 | namespace Bu |
24 | { | 27 | { |
@@ -30,21 +33,8 @@ namespace Bu | |||
30 | FStringChunk *pNext; | 33 | FStringChunk *pNext; |
31 | }; | 34 | }; |
32 | 35 | ||
33 | #ifndef VALTEST | 36 | #define cpy( dest, src, size ) Bu::memcpy( dest, src, size*sizeof(chr) ) |
34 | #define cpy( dest, src, size ) memcpy( dest, src, size*sizeof(chr) ) | ||
35 | #endif | ||
36 | 37 | ||
37 | #ifdef VALTEST | ||
38 | void cpy( chr *dest, const chr *src, long count ) const | ||
39 | { | ||
40 | for( int j = 0; j < count; j++ ) | ||
41 | { | ||
42 | *dest = *src; | ||
43 | dest++; | ||
44 | src++; | ||
45 | } | ||
46 | } | ||
47 | #endif | ||
48 | template<typename chr, int nMinSize, typename chralloc, typename chunkalloc> | 38 | template<typename chr, int nMinSize, typename chralloc, typename chunkalloc> |
49 | struct FStringCore | 39 | struct FStringCore |
50 | { | 40 | { |
@@ -185,7 +175,7 @@ namespace Bu | |||
185 | *@param chunkalloc (typename) Memory Allocator for chr chunks | 175 | *@param chunkalloc (typename) Memory Allocator for chr chunks |
186 | */ | 176 | */ |
187 | template< typename chr, int nMinSize=256, typename chralloc=std::allocator<chr>, typename chunkalloc=std::allocator<struct FStringChunk<chr> > > | 177 | template< typename chr, int nMinSize=256, typename chralloc=std::allocator<chr>, typename chunkalloc=std::allocator<struct FStringChunk<chr> > > |
188 | class FBasicString : public SharedCore< FStringCore<chr, nMinSize, chralloc, chunkalloc> >, public Archival | 178 | class FBasicString : public SharedCore< FStringCore<chr, nMinSize, chralloc, chunkalloc> > |
189 | { | 179 | { |
190 | protected: | 180 | protected: |
191 | typedef struct FStringChunk<chr> Chunk; | 181 | typedef struct FStringChunk<chr> Chunk; |
@@ -211,8 +201,7 @@ namespace Bu | |||
211 | } | 201 | } |
212 | 202 | ||
213 | FBasicString( const MyType &rSrc ) : | 203 | FBasicString( const MyType &rSrc ) : |
214 | SharedCore<Core>( rSrc ), | 204 | SharedCore<Core>( rSrc ) |
215 | Archival() | ||
216 | { | 205 | { |
217 | } | 206 | } |
218 | 207 | ||
@@ -1284,13 +1273,6 @@ namespace Bu | |||
1284 | return (*this); | 1273 | return (*this); |
1285 | } | 1274 | } |
1286 | 1275 | ||
1287 | MyType &operator=( const std::basic_string<chr> &rData ) | ||
1288 | { | ||
1289 | set( rData.c_str(), rData.size() ); | ||
1290 | |||
1291 | return (*this); | ||
1292 | } | ||
1293 | |||
1294 | MyType operator+( const MyType &rRight ) const | 1276 | MyType operator+( const MyType &rRight ) const |
1295 | { | 1277 | { |
1296 | MyType ret( *this ); | 1278 | MyType ret( *this ); |
@@ -1505,8 +1487,8 @@ namespace Bu | |||
1505 | flatten(); | 1487 | flatten(); |
1506 | pData.flatten(); | 1488 | pData.flatten(); |
1507 | 1489 | ||
1508 | const chr *a = pData.core->pFirst->pData; | 1490 | const chr *a = core->pFirst->pData; |
1509 | chr *b = core->pFirst->pData; | 1491 | chr *b = pData.core->pFirst->pData; |
1510 | for( long j = 0; j < core->nLength; j++, a++, b++ ) | 1492 | for( long j = 0; j < core->nLength; j++, a++, b++ ) |
1511 | { | 1493 | { |
1512 | if( *a != *b ) | 1494 | if( *a != *b ) |
@@ -1521,8 +1503,8 @@ namespace Bu | |||
1521 | flatten(); | 1503 | flatten(); |
1522 | pData.flatten(); | 1504 | pData.flatten(); |
1523 | 1505 | ||
1524 | const chr *a = pData.core->pFirst->pData; | 1506 | const chr *a = core->pFirst->pData; |
1525 | chr *b = core->pFirst->pData; | 1507 | chr *b = pData.core->pFirst->pData; |
1526 | for( long j = 0; j < core->nLength; j++, a++, b++ ) | 1508 | for( long j = 0; j < core->nLength; j++, a++, b++ ) |
1527 | { | 1509 | { |
1528 | if( *a != *b ) | 1510 | if( *a != *b ) |
@@ -1902,51 +1884,6 @@ namespace Bu | |||
1902 | va_end( ap ); | 1884 | va_end( ap ); |
1903 | } | 1885 | } |
1904 | 1886 | ||
1905 | /** | ||
1906 | * Function the archiver calls to archive your FString. | ||
1907 | *@param ar (Archive) The archive which is archiving your FString. | ||
1908 | */ | ||
1909 | void archive( class Archive &ar ) | ||
1910 | { | ||
1911 | if( ar.isLoading() ) | ||
1912 | { | ||
1913 | _hardCopy(); | ||
1914 | core->clear(); | ||
1915 | long nLen; | ||
1916 | ar >> nLen; | ||
1917 | |||
1918 | if( nLen > 0 ) | ||
1919 | { | ||
1920 | Chunk *pNew = core->newChunk( nLen ); | ||
1921 | ar.read( pNew->pData, nLen*sizeof(chr) ); | ||
1922 | core->appendChunk( pNew ); | ||
1923 | } | ||
1924 | } | ||
1925 | else | ||
1926 | { | ||
1927 | flatten(); | ||
1928 | |||
1929 | ar << core->nLength; | ||
1930 | if( core->nLength ) | ||
1931 | ar.write( core->pFirst->pData, core->nLength*sizeof(chr) ); | ||
1932 | } | ||
1933 | } | ||
1934 | /* | ||
1935 | void archive( class Archive &ar ) const | ||
1936 | { | ||
1937 | if( ar.isLoading() ) | ||
1938 | { | ||
1939 | } | ||
1940 | else | ||
1941 | { | ||
1942 | flatten(); | ||
1943 | |||
1944 | ar << core->nLength; | ||
1945 | if( core->nLength ) | ||
1946 | ar.write( core->pFirst->pData, core->nLength*sizeof(chr) ); | ||
1947 | } | ||
1948 | }*/ | ||
1949 | |||
1950 | iterator begin() | 1887 | iterator begin() |
1951 | { | 1888 | { |
1952 | if( core->nLength == 0 ) | 1889 | if( core->nLength == 0 ) |
@@ -2016,10 +1953,27 @@ namespace Bu | |||
2016 | ret.append( rRight ); | 1953 | ret.append( rRight ); |
2017 | return ret; | 1954 | return ret; |
2018 | } | 1955 | } |
1956 | |||
1957 | template<class chr, int b, class c, class d> | ||
1958 | ArchiveBase &operator<<( ArchiveBase &ar, const FBasicString<chr, b, c, d> &s ) | ||
1959 | { | ||
1960 | long n = s.getSize(); | ||
1961 | ar << n; | ||
1962 | ar.write( s.getConstStr(), n ); | ||
1963 | return ar; | ||
1964 | } | ||
1965 | |||
1966 | template<class chr, int b, class c, class d> | ||
1967 | ArchiveBase &operator>>( ArchiveBase &ar, FBasicString<chr, b, c, d> &s ) | ||
1968 | { | ||
1969 | long n; | ||
1970 | ar >> n; | ||
1971 | s.setSize( n ); | ||
1972 | ar.read( s.getStr(), n ); | ||
1973 | return ar; | ||
1974 | } | ||
2019 | } | 1975 | } |
2020 | 1976 | ||
2021 | #ifndef VALTEST | ||
2022 | #undef cpy | 1977 | #undef cpy |
2023 | #endif | ||
2024 | 1978 | ||
2025 | #endif | 1979 | #endif |
diff --git a/src/fifo.cpp b/src/fifo.cpp index f34bb91..f72e965 100644 --- a/src/fifo.cpp +++ b/src/fifo.cpp | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <sys/types.h> | 10 | #include <sys/types.h> |
11 | #include <sys/stat.h> | 11 | #include <sys/stat.h> |
12 | #include <fcntl.h> | 12 | #include <fcntl.h> |
13 | #include <unistd.h> | ||
13 | 14 | ||
14 | namespace Bu { subExceptionDef( FifoException ) } | 15 | namespace Bu { subExceptionDef( FifoException ) } |
15 | 16 | ||
diff --git a/src/formatter.cpp b/src/formatter.cpp index b841c5e..830e527 100644 --- a/src/formatter.cpp +++ b/src/formatter.cpp | |||
@@ -7,6 +7,8 @@ | |||
7 | 7 | ||
8 | #include "formatter.h" | 8 | #include "formatter.h" |
9 | 9 | ||
10 | #include <string.h> | ||
11 | |||
10 | Bu::Formatter::Formatter( Stream &rOut ) : | 12 | Bu::Formatter::Formatter( Stream &rOut ) : |
11 | rOut( rOut ), | 13 | rOut( rOut ), |
12 | uIndent( 0 ), | 14 | uIndent( 0 ), |
diff --git a/src/fstring.cpp b/src/fstring.cpp index f77e718..a036d72 100644 --- a/src/fstring.cpp +++ b/src/fstring.cpp | |||
@@ -33,12 +33,6 @@ template<> bool Bu::__cmpHashKeys<Bu::FString>( | |||
33 | return a == b; | 33 | return a == b; |
34 | } | 34 | } |
35 | 35 | ||
36 | std::basic_ostream<char>& operator<< (std::basic_ostream<char> &os, const Bu::FString &val ) | ||
37 | { | ||
38 | os.write( val.getStr(), val.getSize() ); | ||
39 | return os; | ||
40 | } | ||
41 | |||
42 | template<> void Bu::__tracer_format<Bu::FString>( const Bu::FString &v ) | 36 | template<> void Bu::__tracer_format<Bu::FString>( const Bu::FString &v ) |
43 | { | 37 | { |
44 | printf("(%ld)\"%s\"", v.getSize(), v.getStr() ); | 38 | printf("(%ld)\"%s\"", v.getSize(), v.getStr() ); |
diff --git a/src/fstring.h b/src/fstring.h index 1fc02ca..0bffd3e 100644 --- a/src/fstring.h +++ b/src/fstring.h | |||
@@ -14,6 +14,12 @@ namespace Bu | |||
14 | { | 14 | { |
15 | typedef FBasicString<char> FString; | 15 | typedef FBasicString<char> FString; |
16 | 16 | ||
17 | template<typename T> | ||
18 | uint32_t __calcHashCode( const T &k ); | ||
19 | |||
20 | template<typename T> | ||
21 | bool __cmpHashKeys( const T &a, const T &b ); | ||
22 | |||
17 | template<> uint32_t __calcHashCode<FString>( const FString &k ); | 23 | template<> uint32_t __calcHashCode<FString>( const FString &k ); |
18 | template<> bool __cmpHashKeys<FString>( | 24 | template<> bool __cmpHashKeys<FString>( |
19 | const FString &a, const FString &b ); | 25 | const FString &a, const FString &b ); |
diff --git a/src/hash.cpp b/src/hash.cpp index de925a7..dfd5d80 100644 --- a/src/hash.cpp +++ b/src/hash.cpp | |||
@@ -67,22 +67,3 @@ template<> bool Bu::__cmpHashKeys<char *>( char * const &a, char * const &b ) | |||
67 | return false; | 67 | return false; |
68 | } | 68 | } |
69 | 69 | ||
70 | template<> uint32_t Bu::__calcHashCode<std::string>( const std::string &k ) | ||
71 | { | ||
72 | std::string::size_type j, sz = k.size(); | ||
73 | const char *s = k.c_str(); | ||
74 | |||
75 | unsigned long int nPos = 0; | ||
76 | for( j = 0; j < sz; j++, s++ ) | ||
77 | { | ||
78 | nPos = *s + (nPos << 6) + (nPos << 16) - nPos; | ||
79 | } | ||
80 | |||
81 | return nPos; | ||
82 | } | ||
83 | |||
84 | template<> bool Bu::__cmpHashKeys<std::string>( const std::string &a, const std::string &b ) | ||
85 | { | ||
86 | return a == b; | ||
87 | } | ||
88 | |||
@@ -8,17 +8,11 @@ | |||
8 | #ifndef BU_HASH_H | 8 | #ifndef BU_HASH_H |
9 | #define BU_HASH_H | 9 | #define BU_HASH_H |
10 | 10 | ||
11 | #include <stddef.h> | ||
12 | #include <string.h> | ||
13 | #include <memory> | 11 | #include <memory> |
14 | #include <iostream> | ||
15 | #include <list> | ||
16 | #include <utility> | ||
17 | #include "bu/exceptionbase.h" | 12 | #include "bu/exceptionbase.h" |
18 | #include "bu/list.h" | 13 | #include "bu/list.h" |
19 | #include "bu/util.h" | 14 | #include "bu/util.h" |
20 | //#include "archival.h" | 15 | #include "archivebase.h" |
21 | //#include "archive.h" | ||
22 | 16 | ||
23 | #define bitsToBytes( n ) (n/32+(n%32>0 ? 1 : 0)) | 17 | #define bitsToBytes( n ) (n/32+(n%32>0 ? 1 : 0)) |
24 | 18 | ||
@@ -373,6 +367,11 @@ namespace Bu | |||
373 | return nFilled-nDeleted; | 367 | return nFilled-nDeleted; |
374 | } | 368 | } |
375 | 369 | ||
370 | bool isEmpty() const | ||
371 | { | ||
372 | return (nFilled-nDeleted) == 0; | ||
373 | } | ||
374 | |||
376 | /** | 375 | /** |
377 | * Get the number of items which have been deleted, but not yet | 376 | * Get the number of items which have been deleted, but not yet |
378 | * cleaned up. | 377 | * cleaned up. |
@@ -1171,9 +1170,6 @@ namespace Bu | |||
1171 | template<> uint32_t __calcHashCode<char *>( char * const &k ); | 1170 | template<> uint32_t __calcHashCode<char *>( char * const &k ); |
1172 | template<> bool __cmpHashKeys<char *>( char * const &a, char * const &b ); | 1171 | template<> bool __cmpHashKeys<char *>( char * const &a, char * const &b ); |
1173 | 1172 | ||
1174 | template<> uint32_t __calcHashCode<std::string>( const std::string &k ); | ||
1175 | template<> bool __cmpHashKeys<std::string>( const std::string &a, const std::string &b ); | ||
1176 | |||
1177 | class Formatter; | 1173 | class Formatter; |
1178 | Formatter &operator<<( Formatter &rOut, char *sStr ); | 1174 | Formatter &operator<<( Formatter &rOut, char *sStr ); |
1179 | Formatter &operator<<( Formatter &rOut, signed char c ); | 1175 | Formatter &operator<<( Formatter &rOut, signed char c ); |
@@ -1190,30 +1186,30 @@ namespace Bu | |||
1190 | f << '}'; | 1186 | f << '}'; |
1191 | 1187 | ||
1192 | return f; | 1188 | return f; |
1193 | } | 1189 | } |
1194 | 1190 | ||
1195 | /* | 1191 | template<typename key, typename value, typename a, typename b, |
1196 | template<typename key, typename value> | 1192 | typename c, typename d> |
1197 | Archive &operator<<( Archive &ar, Hash<key,value> &h ) | 1193 | ArchiveBase &operator<<( ArchiveBase &ar, const Hash<key,value,a,b,c,d> &h ) |
1198 | { | 1194 | { |
1199 | ar << h.size(); | 1195 | ar << h.getSize(); |
1200 | for( typename Hash<key,value>::iterator i = h.begin(); i != h.end(); i++ ) | 1196 | for( typename Hash<key,value>::const_iterator i = h.begin(); i != h.end(); i++ ) |
1201 | { | 1197 | { |
1202 | std::pair<key,value> p = *i; | 1198 | ar << (i.getKey()) << (i.getValue()); |
1203 | ar << p.first << p.second; | ||
1204 | } | 1199 | } |
1205 | 1200 | ||
1206 | return ar; | 1201 | return ar; |
1207 | } | 1202 | } |
1208 | 1203 | ||
1209 | template<typename key, typename value> | 1204 | template<typename key, typename value, typename a, typename b, |
1210 | Archive &operator>>( Archive &ar, Hash<key,value> &h ) | 1205 | typename c, typename d> |
1206 | ArchiveBase &operator>>( ArchiveBase &ar, Hash<key,value,a,b,c,d> &h ) | ||
1211 | { | 1207 | { |
1212 | h.clear(); | 1208 | h.clear(); |
1213 | uint32_t nSize; | 1209 | long nSize; |
1214 | ar >> nSize; | 1210 | ar >> nSize; |
1215 | 1211 | ||
1216 | for( uint32_t j = 0; j < nSize; j++ ) | 1212 | for( long j = 0; j < nSize; j++ ) |
1217 | { | 1213 | { |
1218 | key k; value v; | 1214 | key k; value v; |
1219 | ar >> k >> v; | 1215 | ar >> k >> v; |
@@ -1221,21 +1217,7 @@ namespace Bu | |||
1221 | } | 1217 | } |
1222 | 1218 | ||
1223 | return ar; | 1219 | return ar; |
1224 | }*/ | 1220 | } |
1225 | |||
1226 | /* | ||
1227 | template<typename key, typename value> | ||
1228 | Serializer &operator&&( Serializer &ar, Hash<key,value> &h ) | ||
1229 | { | ||
1230 | if( ar.isLoading() ) | ||
1231 | { | ||
1232 | return ar >> h; | ||
1233 | } | ||
1234 | else | ||
1235 | { | ||
1236 | return ar << h; | ||
1237 | } | ||
1238 | }*/ | ||
1239 | } | 1221 | } |
1240 | 1222 | ||
1241 | #endif | 1223 | #endif |
@@ -9,11 +9,10 @@ | |||
9 | #define BU_HEAP_H | 9 | #define BU_HEAP_H |
10 | 10 | ||
11 | #include <stddef.h> | 11 | #include <stddef.h> |
12 | #include <string.h> | ||
13 | #include <memory> | 12 | #include <memory> |
14 | #include <iostream> | ||
15 | #include "bu/exceptionbase.h" | 13 | #include "bu/exceptionbase.h" |
16 | #include "bu/util.h" | 14 | #include "bu/util.h" |
15 | // #include "bu/formatter.h" | ||
17 | 16 | ||
18 | namespace Bu | 17 | namespace Bu |
19 | { | 18 | { |
@@ -29,6 +28,33 @@ namespace Bu | |||
29 | aItem( ia.allocate( iSize ) ) | 28 | aItem( ia.allocate( iSize ) ) |
30 | { | 29 | { |
31 | } | 30 | } |
31 | |||
32 | Heap( cmpfunc cmpin ) : | ||
33 | iSize( 7 ), | ||
34 | iFill( 0 ), | ||
35 | aItem( ia.allocate( iSize ) ), | ||
36 | cmp( cmpin ) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | Heap( int iInitialCapacity ) : | ||
41 | iSize( 0 ), | ||
42 | iFill( 0 ), | ||
43 | aItem( NULL ) | ||
44 | { | ||
45 | for( iSize = 1; iSize < iInitialCapacity; iSize=iSize*2+1 ) { } | ||
46 | aItem = ia.allocate( iSize ); | ||
47 | } | ||
48 | |||
49 | Heap( cmpfunc cmpin, int iInitialCapacity ) : | ||
50 | iSize( 0 ), | ||
51 | iFill( 0 ), | ||
52 | aItem( NULL ), | ||
53 | cmp( cmpin ) | ||
54 | { | ||
55 | for( iSize = 1; iSize < iInitialCapacity; iSize=iSize*2+1 ) { } | ||
56 | aItem = ia.allocate( iSize ); | ||
57 | } | ||
32 | 58 | ||
33 | virtual ~Heap() | 59 | virtual ~Heap() |
34 | { | 60 | { |
@@ -47,9 +73,11 @@ namespace Bu | |||
47 | { | 73 | { |
48 | if( cmp( i, aItem[j] ) ) | 74 | if( cmp( i, aItem[j] ) ) |
49 | { | 75 | { |
50 | swap( i, aItem[j] ); | 76 | Bu::swap( i, aItem[j] ); |
51 | } | 77 | } |
52 | 78 | ||
79 | if( j*2+1 >= iFill ) | ||
80 | break; | ||
53 | if( cmp( i, aItem[j*2+1] ) ) | 81 | if( cmp( i, aItem[j*2+1] ) ) |
54 | { | 82 | { |
55 | j = j*2+1; | 83 | j = j*2+1; |
@@ -68,7 +96,7 @@ namespace Bu | |||
68 | if( cmp( aItem[k], aItem[j] ) ) | 96 | if( cmp( aItem[k], aItem[j] ) ) |
69 | break; | 97 | break; |
70 | 98 | ||
71 | swap( aItem[k], aItem[j] ); | 99 | Bu::swap( aItem[k], aItem[j] ); |
72 | j = k; | 100 | j = k; |
73 | } | 101 | } |
74 | } | 102 | } |
@@ -90,20 +118,22 @@ namespace Bu | |||
90 | int j; | 118 | int j; |
91 | for( j = 0; j < iFill; ) | 119 | for( j = 0; j < iFill; ) |
92 | { | 120 | { |
93 | if( cmp( aItem[j*2+2], aItem[j*2+1] ) && j*2+2 < iFill ) | 121 | int k = j*2+1; |
122 | if( k+1 < iFill && cmp( aItem[k+1], aItem[k] ) ) | ||
94 | { | 123 | { |
95 | aItem[j] = aItem[j*2+2]; | 124 | aItem[j] = aItem[k+1]; |
96 | j = j*2+2; | 125 | j = k+1; |
97 | } | 126 | } |
98 | else if( j*2+1 < iFill ) | 127 | else if( k < iFill ) |
99 | { | 128 | { |
100 | aItem[j] = aItem[j*2+1]; | 129 | aItem[j] = aItem[k]; |
101 | j = j*2+1; | 130 | j = k; |
102 | } | 131 | } |
103 | else | 132 | else |
104 | break; | 133 | break; |
105 | } | 134 | } |
106 | aItem[j] = aItem[iFill-1]; | 135 | if( j < iFill-1 ) |
136 | aItem[j] = aItem[iFill-1]; | ||
107 | ia.destroy( &aItem[iFill-1] ); | 137 | ia.destroy( &aItem[iFill-1] ); |
108 | iFill--; | 138 | iFill--; |
109 | 139 | ||
@@ -119,35 +149,34 @@ namespace Bu | |||
119 | { | 149 | { |
120 | return iFill; | 150 | return iFill; |
121 | } | 151 | } |
122 | 152 | /* | |
123 | void print() | 153 | void print( Formatter &f ) |
124 | { | 154 | { |
125 | printf("graph G {\n"); | 155 | f << "graph G {" << f.nl; |
126 | for( int j = 0; j < iFill; j++ ) | 156 | for( int j = 0; j < iFill; j++ ) |
127 | { | 157 | { |
128 | if( j*2+1 < iFill ) | 158 | if( j*2+1 < iFill ) |
129 | printf(" %d -- %d;\n", | 159 | f << " " << j << " -- " << j*2+1 << ";" << f.nl; |
130 | j, j*2+1 | ||
131 | ); | ||
132 | if( j*2+2 < iFill ) | 160 | if( j*2+2 < iFill ) |
133 | printf(" %d -- %d;\n", | 161 | f << " " << j << " -- " << j*2+2 << ";" << f.nl; |
134 | j, j*2+2 | ||
135 | ); | ||
136 | } | 162 | } |
137 | for( int j = 0; j < iFill; j++ ) | 163 | for( int j = 0; j < iFill; j++ ) |
138 | { | 164 | { |
139 | printf(" %d [label=\"%d\"];\n", | 165 | f << " " << j << " [label=\"" << aItem[j] << "\"];" << f.nl; |
140 | j, aItem[j] | ||
141 | ); | ||
142 | } | 166 | } |
143 | printf("}\n"); | 167 | f << "}" << f.nl; |
144 | } | 168 | } */ |
145 | 169 | ||
146 | private: | 170 | private: |
147 | void upSize() | 171 | void upSize() |
148 | { | 172 | { |
149 | item *aNewItems = ia.allocate( iSize*2+1 ); | 173 | item *aNewItems = ia.allocate( iSize*2+1 ); |
150 | memcpy( aNewItems, aItem, sizeof(item)*iFill ); | 174 | // memcpy( aNewItems, aItem, sizeof(item)*iFill ); |
175 | for( int j = 0; j < iFill; j++ ) | ||
176 | { | ||
177 | ia.construct( &aNewItems[j], aItem[j] ); | ||
178 | ia.destroy( &aItem[j] ); | ||
179 | } | ||
151 | ia.deallocate( aItem, iSize ); | 180 | ia.deallocate( aItem, iSize ); |
152 | aItem = aNewItems; | 181 | aItem = aNewItems; |
153 | iSize = iSize*2+1; | 182 | iSize = iSize*2+1; |
diff --git a/src/httpget.h b/src/httpget.h index 7484566..840c893 100644 --- a/src/httpget.h +++ b/src/httpget.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #include "bu/fstring.h" | 12 | #include "bu/fstring.h" |
13 | #include "bu/url.h" | 13 | #include "bu/url.h" |
14 | #include "bu/socket.h" | 14 | #include "bu/socket.h" |
15 | #include "bu/hash.h" | ||
15 | 16 | ||
16 | namespace Bu | 17 | namespace Bu |
17 | { | 18 | { |
@@ -11,7 +11,8 @@ | |||
11 | #include <memory> | 11 | #include <memory> |
12 | #include "bu/exceptionbase.h" | 12 | #include "bu/exceptionbase.h" |
13 | #include "bu/sharedcore.h" | 13 | #include "bu/sharedcore.h" |
14 | //#include "bu/util.h" | 14 | #include "bu/archivebase.h" |
15 | #include "bu/heap.h" | ||
15 | 16 | ||
16 | namespace Bu | 17 | namespace Bu |
17 | { | 18 | { |
@@ -23,7 +24,7 @@ namespace Bu | |||
23 | ListLink *pPrev; | 24 | ListLink *pPrev; |
24 | }; | 25 | }; |
25 | 26 | ||
26 | template<typename value, typename cmpfunc, typename valuealloc, | 27 | template<typename value, typename valuealloc, |
27 | typename linkalloc> | 28 | typename linkalloc> |
28 | struct ListCore | 29 | struct ListCore |
29 | { | 30 | { |
@@ -42,7 +43,6 @@ namespace Bu | |||
42 | Link *pFirst; | 43 | Link *pFirst; |
43 | Link *pLast; | 44 | Link *pLast; |
44 | long nSize; | 45 | long nSize; |
45 | cmpfunc cmp; | ||
46 | linkalloc la; | 46 | linkalloc la; |
47 | valuealloc va; | 47 | valuealloc va; |
48 | 48 | ||
@@ -189,16 +189,15 @@ namespace Bu | |||
189 | *@param linkalloc (typename) Memory Allocator for the list links. | 189 | *@param linkalloc (typename) Memory Allocator for the list links. |
190 | *@ingroup Containers | 190 | *@ingroup Containers |
191 | */ | 191 | */ |
192 | template<typename value, typename cmpfunc=__basicGTCmp<value>, | 192 | template<typename value, typename valuealloc=std::allocator<value>, |
193 | typename valuealloc=std::allocator<value>, | ||
194 | typename linkalloc=std::allocator<struct ListLink<value> > > | 193 | typename linkalloc=std::allocator<struct ListLink<value> > > |
195 | class List : public SharedCore< struct ListCore<value, cmpfunc, valuealloc, | 194 | class List : public SharedCore< struct ListCore<value, valuealloc, |
196 | linkalloc> > | 195 | linkalloc> > |
197 | { | 196 | { |
198 | private: | 197 | private: |
199 | typedef struct ListLink<value> Link; | 198 | typedef struct ListLink<value> Link; |
200 | typedef class List<value, cmpfunc, valuealloc, linkalloc> MyType; | 199 | typedef class List<value, valuealloc, linkalloc> MyType; |
201 | typedef struct ListCore<value, cmpfunc, valuealloc, linkalloc> Core; | 200 | typedef struct ListCore<value, valuealloc, linkalloc> Core; |
202 | 201 | ||
203 | protected: | 202 | protected: |
204 | using SharedCore< Core >::core; | 203 | using SharedCore< Core >::core; |
@@ -241,6 +240,26 @@ namespace Bu | |||
241 | return *this; | 240 | return *this; |
242 | } | 241 | } |
243 | 242 | ||
243 | bool operator==( const MyType &rhs ) | ||
244 | { | ||
245 | if( getSize() != rhs.getSize() ) | ||
246 | return false; | ||
247 | |||
248 | for( typename MyType::const_iterator a = begin(), b = rhs.begin(); | ||
249 | a; a++, b++ ) | ||
250 | { | ||
251 | if( *a != *b ) | ||
252 | return false; | ||
253 | } | ||
254 | |||
255 | return true; | ||
256 | } | ||
257 | |||
258 | bool operator!=( const MyType &rhs ) | ||
259 | { | ||
260 | return !(*this == rhs); | ||
261 | } | ||
262 | |||
244 | /** | 263 | /** |
245 | * Clear the data from the list. | 264 | * Clear the data from the list. |
246 | */ | 265 | */ |
@@ -350,6 +369,41 @@ namespace Bu | |||
350 | return *this; | 369 | return *this; |
351 | } | 370 | } |
352 | 371 | ||
372 | template<typename cmptype> | ||
373 | void sort( cmptype cmp ) | ||
374 | { | ||
375 | Heap<value, cmptype, valuealloc> hSort( cmp, getSize() ); | ||
376 | for( typename MyType::iterator i = begin(); i; i++ ) | ||
377 | { | ||
378 | hSort.enqueue( *i ); | ||
379 | } | ||
380 | clear(); | ||
381 | while( !hSort.isEmpty() ) | ||
382 | { | ||
383 | append( hSort.dequeue() ); | ||
384 | } | ||
385 | } | ||
386 | |||
387 | void sort() | ||
388 | { | ||
389 | sort<__basicLTCmp<value> >(); | ||
390 | } | ||
391 | |||
392 | template<typename cmptype> | ||
393 | void sort() | ||
394 | { | ||
395 | Heap<value, cmptype, valuealloc> hSort( getSize() ); | ||
396 | for( typename MyType::iterator i = begin(); i; i++ ) | ||
397 | { | ||
398 | hSort.enqueue( *i ); | ||
399 | } | ||
400 | clear(); | ||
401 | while( !hSort.isEmpty() ) | ||
402 | { | ||
403 | append( hSort.dequeue() ); | ||
404 | } | ||
405 | } | ||
406 | |||
353 | /** | 407 | /** |
354 | * Insert a new item in sort order by searching for the first item that | 408 | * Insert a new item in sort order by searching for the first item that |
355 | * is larger and inserting this before it, or at the end if none are | 409 | * is larger and inserting this before it, or at the end if none are |
@@ -357,7 +411,8 @@ namespace Bu | |||
357 | * List all items will be sorted. To use this, the value type must | 411 | * List all items will be sorted. To use this, the value type must |
358 | * support the > operator. | 412 | * support the > operator. |
359 | */ | 413 | */ |
360 | MyType &insertSorted( const value &v ) | 414 | template<typename cmptype> |
415 | MyType &insertSorted( cmptype cmp, const value &v ) | ||
361 | { | 416 | { |
362 | _hardCopy(); | 417 | _hardCopy(); |
363 | if( core->pFirst == NULL ) | 418 | if( core->pFirst == NULL ) |
@@ -371,7 +426,7 @@ namespace Bu | |||
371 | Link *pCur = core->pFirst; | 426 | Link *pCur = core->pFirst; |
372 | for(;;) | 427 | for(;;) |
373 | { | 428 | { |
374 | if( !core->cmp( v, *(pCur->pValue)) ) | 429 | if( cmp( v, *(pCur->pValue)) ) |
375 | { | 430 | { |
376 | core->insert( pCur, v ); | 431 | core->insert( pCur, v ); |
377 | return *this; | 432 | return *this; |
@@ -385,6 +440,18 @@ namespace Bu | |||
385 | } | 440 | } |
386 | } | 441 | } |
387 | } | 442 | } |
443 | |||
444 | MyType &insertSorted( const value &v ) | ||
445 | { | ||
446 | return insertSorted<__basicLTCmp<value> >( v ); | ||
447 | } | ||
448 | |||
449 | template<typename cmptype> | ||
450 | MyType &insertSorted( const value &v ) | ||
451 | { | ||
452 | cmptype cmp; | ||
453 | return insertSorted( cmp, v ); | ||
454 | } | ||
388 | 455 | ||
389 | /** | 456 | /** |
390 | * An iterator to iterate through your list. | 457 | * An iterator to iterate through your list. |
@@ -392,7 +459,7 @@ namespace Bu | |||
392 | typedef struct iterator | 459 | typedef struct iterator |
393 | { | 460 | { |
394 | friend struct const_iterator; | 461 | friend struct const_iterator; |
395 | friend class List<value, cmpfunc, valuealloc, linkalloc>; | 462 | friend class List<value, valuealloc, linkalloc>; |
396 | private: | 463 | private: |
397 | Link *pLink; | 464 | Link *pLink; |
398 | 465 | ||
@@ -559,7 +626,7 @@ namespace Bu | |||
559 | */ | 626 | */ |
560 | typedef struct const_iterator | 627 | typedef struct const_iterator |
561 | { | 628 | { |
562 | friend class List<value, cmpfunc, valuealloc, linkalloc>; | 629 | friend class List<value, valuealloc, linkalloc>; |
563 | private: | 630 | private: |
564 | Link *pLink; | 631 | Link *pLink; |
565 | 632 | ||
@@ -844,11 +911,11 @@ namespace Bu | |||
844 | class Formatter; | 911 | class Formatter; |
845 | Formatter &operator<<( Formatter &rOut, char *sStr ); | 912 | Formatter &operator<<( Formatter &rOut, char *sStr ); |
846 | Formatter &operator<<( Formatter &rOut, signed char c ); | 913 | Formatter &operator<<( Formatter &rOut, signed char c ); |
847 | template<typename a, typename b, typename c, typename d> | 914 | template<typename a, typename b, typename c> |
848 | Formatter &operator<<( Formatter &f, const Bu::List<a,b,c,d> &l ) | 915 | Formatter &operator<<( Formatter &f, const Bu::List<a,b,c> &l ) |
849 | { | 916 | { |
850 | f << '['; | 917 | f << '['; |
851 | for( typename Bu::List<a,b,c,d>::const_iterator i = l.begin(); i; i++ ) | 918 | for( typename Bu::List<a,b,c>::const_iterator i = l.begin(); i; i++ ) |
852 | { | 919 | { |
853 | if( i != l.begin() ) | 920 | if( i != l.begin() ) |
854 | f << ", "; | 921 | f << ", "; |
@@ -858,6 +925,36 @@ namespace Bu | |||
858 | 925 | ||
859 | return f; | 926 | return f; |
860 | } | 927 | } |
928 | |||
929 | template<typename value, typename a, typename b> | ||
930 | ArchiveBase &operator<<( ArchiveBase &ar, const List<value,a,b> &h ) | ||
931 | { | ||
932 | ar << h.getSize(); | ||
933 | for( typename List<value>::const_iterator i = h.begin(); i != h.end(); i++ ) | ||
934 | { | ||
935 | ar << (*i); | ||
936 | } | ||
937 | |||
938 | return ar; | ||
939 | } | ||
940 | |||
941 | template<typename value, typename a, typename b> | ||
942 | ArchiveBase &operator>>( ArchiveBase &ar, List<value,a,b> &h ) | ||
943 | { | ||
944 | h.clear(); | ||
945 | long nSize; | ||
946 | ar >> nSize; | ||
947 | |||
948 | for( long j = 0; j < nSize; j++ ) | ||
949 | { | ||
950 | value v; | ||
951 | ar >> v; | ||
952 | h.append( v ); | ||
953 | } | ||
954 | |||
955 | return ar; | ||
956 | } | ||
957 | |||
861 | } | 958 | } |
862 | 959 | ||
863 | #endif | 960 | #endif |
diff --git a/src/logger.cpp b/src/logger.cpp index 8cba1b9..e3de2fb 100644 --- a/src/logger.cpp +++ b/src/logger.cpp | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <time.h> | 10 | #include <time.h> |
11 | #include <stdio.h> | 11 | #include <stdio.h> |
12 | #include <stdlib.h> | 12 | #include <stdlib.h> |
13 | #include <unistd.h> | ||
13 | 14 | ||
14 | Bu::Logger::Logger() | 15 | Bu::Logger::Logger() |
15 | { | 16 | { |
diff --git a/src/nidsstream.cpp b/src/nidsstream.cpp index 9aee156..e8c3323 100644 --- a/src/nidsstream.cpp +++ b/src/nidsstream.cpp | |||
@@ -7,6 +7,8 @@ | |||
7 | 7 | ||
8 | #include "bu/nidsstream.h" | 8 | #include "bu/nidsstream.h" |
9 | 9 | ||
10 | #include <string.h> | ||
11 | |||
10 | Bu::NidsStream::NidsStream( Nids &rNids, uint32_t uStream ) : | 12 | Bu::NidsStream::NidsStream( Nids &rNids, uint32_t uStream ) : |
11 | rNids( rNids ), | 13 | rNids( rNids ), |
12 | uStream( uStream ), | 14 | uStream( uStream ), |
diff --git a/src/paramproc.cpp b/src/paramproc.cpp index 819a4da..fb07894 100644 --- a/src/paramproc.cpp +++ b/src/paramproc.cpp | |||
@@ -8,6 +8,7 @@ | |||
8 | #include "paramproc.h" | 8 | #include "paramproc.h" |
9 | #include <stdio.h> | 9 | #include <stdio.h> |
10 | #include <stdlib.h> | 10 | #include <stdlib.h> |
11 | #include <string.h> | ||
11 | 12 | ||
12 | #define ptrtype( iitype, iiname ) \ | 13 | #define ptrtype( iitype, iiname ) \ |
13 | Bu::ParamProc::ParamPtr::ParamPtr( iitype *iiname ) : \ | 14 | Bu::ParamProc::ParamPtr::ParamPtr( iitype *iiname ) : \ |
diff --git a/src/protocolhttp.h b/src/protocolhttp.h index 6632a65..eae525a 100644 --- a/src/protocolhttp.h +++ b/src/protocolhttp.h | |||
@@ -14,6 +14,7 @@ | |||
14 | #include "bu/protocol.h" | 14 | #include "bu/protocol.h" |
15 | #include "bu/client.h" | 15 | #include "bu/client.h" |
16 | #include "bu/fstring.h" | 16 | #include "bu/fstring.h" |
17 | #include "bu/hash.h" | ||
17 | 18 | ||
18 | namespace Bu | 19 | namespace Bu |
19 | { | 20 | { |
diff --git a/src/server.cpp b/src/server.cpp index bfa7880..804ec70 100644 --- a/src/server.cpp +++ b/src/server.cpp | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include "bu/server.h" | 8 | #include "bu/server.h" |
9 | #include <errno.h> | 9 | #include <errno.h> |
10 | #include <unistd.h> | ||
10 | #include "bu/serversocket.h" | 11 | #include "bu/serversocket.h" |
11 | #include "bu/client.h" | 12 | #include "bu/client.h" |
12 | #include "bu/socket.h" | 13 | #include "bu/socket.h" |
diff --git a/src/server.h b/src/server.h index 315248b..1e317a4 100644 --- a/src/server.h +++ b/src/server.h | |||
@@ -16,6 +16,7 @@ | |||
16 | 16 | ||
17 | #include "bu/clientlink.h" | 17 | #include "bu/clientlink.h" |
18 | #include "bu/clientlinkfactory.h" | 18 | #include "bu/clientlinkfactory.h" |
19 | #include "bu/hash.h" | ||
19 | 20 | ||
20 | namespace Bu | 21 | namespace Bu |
21 | { | 22 | { |
@@ -16,6 +16,7 @@ | |||
16 | #include <utility> | 16 | #include <utility> |
17 | #include "bu/exceptionbase.h" | 17 | #include "bu/exceptionbase.h" |
18 | #include "bu/list.h" | 18 | #include "bu/list.h" |
19 | #include "bu/archive.h" | ||
19 | 20 | ||
20 | #define bitsToBytes( n ) (n/32+(n%32>0 ? 1 : 0)) | 21 | #define bitsToBytes( n ) (n/32+(n%32>0 ? 1 : 0)) |
21 | 22 | ||
@@ -763,6 +764,35 @@ namespace Bu | |||
763 | challoc ca; | 764 | challoc ca; |
764 | sizecalc szCalc; | 765 | sizecalc szCalc; |
765 | }; | 766 | }; |
767 | |||
768 | template<typename key, typename b, typename c, typename d> | ||
769 | Archive &operator<<( Archive &ar, const Set<key, b, c, d> &h ) | ||
770 | { | ||
771 | ar << h.getSize(); | ||
772 | for( typename Set<key, b, c, d>::const_iterator i = h.begin(); i != h.end(); i++ ) | ||
773 | { | ||
774 | ar << (*i); | ||
775 | } | ||
776 | |||
777 | return ar; | ||
778 | } | ||
779 | |||
780 | template<typename key, typename b, typename c, typename d> | ||
781 | Archive &operator>>( Archive &ar, Set<key, b, c, d> &h ) | ||
782 | { | ||
783 | h.clear(); | ||
784 | long nSize; | ||
785 | ar >> nSize; | ||
786 | |||
787 | for( long j = 0; j < nSize; j++ ) | ||
788 | { | ||
789 | key v; | ||
790 | ar >> v; | ||
791 | h.insert( v ); | ||
792 | } | ||
793 | |||
794 | return ar; | ||
795 | } | ||
766 | } | 796 | } |
767 | 797 | ||
768 | #endif | 798 | #endif |
diff --git a/src/tests/archive.cpp b/src/tests/archive.cpp index 131d4de..8a5f6ee 100644 --- a/src/tests/archive.cpp +++ b/src/tests/archive.cpp | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include "bu/archive.h" | 8 | #include "bu/archive.h" |
9 | #include "bu/file.h" | 9 | #include "bu/file.h" |
10 | #include "bu/fstring.h" | ||
10 | 11 | ||
11 | using namespace Bu; | 12 | using namespace Bu; |
12 | 13 | ||
@@ -15,7 +16,7 @@ int main() | |||
15 | File f("test.dat", File::Write ); | 16 | File f("test.dat", File::Write ); |
16 | Archive ar( f, Archive::save ); | 17 | Archive ar( f, Archive::save ); |
17 | 18 | ||
18 | std::string s("Hello there"); | 19 | Bu::FString s("Hello there"); |
19 | ar << s; | 20 | ar << s; |
20 | 21 | ||
21 | return 0; | 22 | return 0; |
diff --git a/src/tests/archive2.cpp b/src/tests/archive2.cpp index fddb91b..3d95c2f 100644 --- a/src/tests/archive2.cpp +++ b/src/tests/archive2.cpp | |||
@@ -23,7 +23,7 @@ public: | |||
23 | { | 23 | { |
24 | } | 24 | } |
25 | 25 | ||
26 | virtual void archive( Bu::Archive &ar ) | 26 | virtual void archive( Bu::ArchiveBase &ar ) |
27 | { | 27 | { |
28 | ar && iId; | 28 | ar && iId; |
29 | } | 29 | } |
@@ -47,7 +47,7 @@ public: | |||
47 | delete a2; | 47 | delete a2; |
48 | } | 48 | } |
49 | 49 | ||
50 | virtual void archive( Bu::Archive &ar ) | 50 | virtual void archive( Bu::ArchiveBase &ar ) |
51 | { | 51 | { |
52 | //ar && iId && a1 && a2; | 52 | //ar && iId && a1 && a2; |
53 | ar << iId << a1 << a2; | 53 | ar << iId << a1 << a2; |
@@ -73,7 +73,7 @@ public: | |||
73 | delete b; | 73 | delete b; |
74 | } | 74 | } |
75 | 75 | ||
76 | virtual void archive( Bu::Archive &ar ) | 76 | virtual void archive( Bu::ArchiveBase &ar ) |
77 | { | 77 | { |
78 | //ar && iId && a && b; | 78 | //ar && iId && a && b; |
79 | ar << iId; | 79 | ar << iId; |
diff --git a/src/tests/cache.cpp b/src/tests/cache.cpp index 3fcc34c..a098145 100644 --- a/src/tests/cache.cpp +++ b/src/tests/cache.cpp | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <sys/stat.h> | 10 | #include <sys/stat.h> |
11 | #include <sys/types.h> | 11 | #include <sys/types.h> |
12 | #include <errno.h> | 12 | #include <errno.h> |
13 | #include <unistd.h> | ||
13 | 14 | ||
14 | #include "bu/cache.h" | 15 | #include "bu/cache.h" |
15 | #include "bu/file.h" | 16 | #include "bu/file.h" |
diff --git a/src/tests/fastcgi.cpp b/src/tests/fastcgi.cpp index cd6cdda..46a7d62 100644 --- a/src/tests/fastcgi.cpp +++ b/src/tests/fastcgi.cpp | |||
@@ -7,6 +7,8 @@ | |||
7 | 7 | ||
8 | #include "bu/fastcgi.h" | 8 | #include "bu/fastcgi.h" |
9 | 9 | ||
10 | #include <unistd.h> | ||
11 | |||
10 | class Cgi : public Bu::FastCgi | 12 | class Cgi : public Bu::FastCgi |
11 | { | 13 | { |
12 | public: | 14 | public: |
diff --git a/src/tests/heap.cpp b/src/tests/heap.cpp index daa0356..ae130ec 100644 --- a/src/tests/heap.cpp +++ b/src/tests/heap.cpp | |||
@@ -8,7 +8,10 @@ | |||
8 | #include <stdlib.h> | 8 | #include <stdlib.h> |
9 | #include <stdio.h> | 9 | #include <stdio.h> |
10 | 10 | ||
11 | #include "bu/formatter.h" | ||
11 | #include "bu/heap.h" | 12 | #include "bu/heap.h" |
13 | #include "bu/fstring.h" | ||
14 | #include "bu/file.h" | ||
12 | 15 | ||
13 | typedef struct num | 16 | typedef struct num |
14 | { | 17 | { |
@@ -35,8 +38,18 @@ typedef struct num | |||
35 | } | 38 | } |
36 | } num; | 39 | } num; |
37 | 40 | ||
41 | void printHeap( Bu::Heap<Bu::FString> &h, int j ) | ||
42 | { | ||
43 | Bu::FString sFName; | ||
44 | sFName.format("graph-step-%02d.dot", j ); | ||
45 | Bu::File fOut( sFName, Bu::File::WriteNew ); | ||
46 | Bu::Formatter f( Bu::File ); | ||
47 | //h.print( f ); | ||
48 | } | ||
49 | |||
38 | int main() | 50 | int main() |
39 | { | 51 | { |
52 | /* | ||
40 | Bu::Heap<num> hNum; | 53 | Bu::Heap<num> hNum; |
41 | 54 | ||
42 | for( int j = 0; j < 30; j++ ) | 55 | for( int j = 0; j < 30; j++ ) |
@@ -53,6 +66,46 @@ int main() | |||
53 | hNum.dequeue(); | 66 | hNum.dequeue(); |
54 | } | 67 | } |
55 | printf("\n"); | 68 | printf("\n"); |
69 | */ | ||
70 | Bu::Heap<Bu::FString> hStr; | ||
71 | int j = 0; | ||
72 | |||
73 | hStr.enqueue("George"); | ||
74 | printHeap( hStr, j++ ); | ||
75 | hStr.enqueue("Sam"); | ||
76 | printHeap( hStr, j++ ); | ||
77 | hStr.enqueue("Abby"); | ||
78 | printHeap( hStr, j++ ); | ||
79 | hStr.enqueue("Zorro"); | ||
80 | printHeap( hStr, j++ ); | ||
81 | hStr.enqueue("Brianna"); | ||
82 | printHeap( hStr, j++ ); | ||
83 | hStr.enqueue("Kate"); | ||
84 | printHeap( hStr, j++ ); | ||
85 | hStr.enqueue("Soggy"); | ||
86 | printHeap( hStr, j++ ); | ||
87 | |||
88 | while( !hStr.isEmpty() ) | ||
89 | { | ||
90 | printf("\"%s\" ", hStr.dequeue().getStr() ); | ||
91 | printHeap( hStr, j++ ); | ||
92 | } | ||
93 | printf("\n"); | ||
94 | |||
95 | Bu::List<Bu::FString> lStr; | ||
96 | |||
97 | lStr.insertSorted("George"); | ||
98 | lStr.insertSorted("Sam"); | ||
99 | lStr.insertSorted("Abby"); | ||
100 | lStr.insertSorted("Zorro"); | ||
101 | lStr.insertSorted("Brianna"); | ||
102 | lStr.insertSorted("Kate"); | ||
103 | lStr.insertSorted("Soggy"); | ||
104 | for( Bu::List<Bu::FString>::iterator i = lStr.begin(); i; i++ ) | ||
105 | { | ||
106 | printf("\"%s\" ", (*i).getStr() ); | ||
107 | } | ||
108 | printf("\n"); | ||
56 | 109 | ||
57 | return 0; | 110 | return 0; |
58 | } | 111 | } |
diff --git a/src/tests/itoheap.cpp b/src/tests/itoheap.cpp index 9016d86..c5816b2 100644 --- a/src/tests/itoheap.cpp +++ b/src/tests/itoheap.cpp | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include <stdio.h> | 8 | #include <stdio.h> |
9 | #include <stdlib.h> | 9 | #include <stdlib.h> |
10 | #include <unistd.h> | ||
10 | 11 | ||
11 | #include "bu/itoheap.h" | 12 | #include "bu/itoheap.h" |
12 | #include "bu/ito.h" | 13 | #include "bu/ito.h" |
diff --git a/src/tests/listsort.cpp b/src/tests/listsort.cpp new file mode 100644 index 0000000..f9236e6 --- /dev/null +++ b/src/tests/listsort.cpp | |||
@@ -0,0 +1,60 @@ | |||
1 | #include <bu/list.h> | ||
2 | #include <bu/sio.h> | ||
3 | #include <bu/fstring.h> | ||
4 | |||
5 | using namespace Bu; | ||
6 | |||
7 | int main() | ||
8 | { | ||
9 | FString a("Soggy"), b("Sam"); | ||
10 | |||
11 | if( a < b ) | ||
12 | { | ||
13 | sio << "Bad" << sio.nl; | ||
14 | } | ||
15 | else | ||
16 | { | ||
17 | sio << "Good" << sio.nl; | ||
18 | } | ||
19 | |||
20 | typedef List<FString> StrList; | ||
21 | |||
22 | StrList lNames; | ||
23 | |||
24 | lNames.append("George"); | ||
25 | lNames.append("Sam"); | ||
26 | lNames.append("Abby"); | ||
27 | lNames.append("Zorro"); | ||
28 | lNames.append("Brianna"); | ||
29 | lNames.append("Kate"); | ||
30 | lNames.append("Soggy"); | ||
31 | |||
32 | sio << "Names: " << lNames << sio.nl; | ||
33 | lNames.sort(); | ||
34 | |||
35 | sio << "Names: " << lNames << sio.nl; | ||
36 | |||
37 | StrList lNames2; | ||
38 | |||
39 | lNames2.insertSorted("George"); | ||
40 | lNames2.insertSorted("Sam"); | ||
41 | lNames2.insertSorted("Abby"); | ||
42 | lNames2.insertSorted("Zorro"); | ||
43 | lNames2.insertSorted("Brianna"); | ||
44 | lNames2.insertSorted("Kate"); | ||
45 | lNames2.insertSorted("Soggy"); | ||
46 | |||
47 | sio << "Names: " << lNames2 << sio.nl; | ||
48 | |||
49 | if( lNames == lNames2 ) | ||
50 | { | ||
51 | sio << "They're the same." << sio.nl; | ||
52 | } | ||
53 | else | ||
54 | { | ||
55 | sio << "They're different." << sio.nl; | ||
56 | } | ||
57 | |||
58 | return 0; | ||
59 | } | ||
60 | |||
diff --git a/src/tests/ringbuffer.cpp b/src/tests/ringbuffer.cpp index 46c515b..9489b30 100644 --- a/src/tests/ringbuffer.cpp +++ b/src/tests/ringbuffer.cpp | |||
@@ -7,6 +7,8 @@ | |||
7 | 7 | ||
8 | #include "bu/ringbuffer.h" | 8 | #include "bu/ringbuffer.h" |
9 | #include <stdlib.h> | 9 | #include <stdlib.h> |
10 | #include <stdint.h> | ||
11 | #include <stdio.h> | ||
10 | 12 | ||
11 | int main() | 13 | int main() |
12 | { | 14 | { |
diff --git a/src/tests/serverticks.cpp b/src/tests/serverticks.cpp index e599444..3aad746 100644 --- a/src/tests/serverticks.cpp +++ b/src/tests/serverticks.cpp | |||
@@ -8,6 +8,7 @@ | |||
8 | #include "bu/server.h" | 8 | #include "bu/server.h" |
9 | #include "bu/client.h" | 9 | #include "bu/client.h" |
10 | #include "bu/protocol.h" | 10 | #include "bu/protocol.h" |
11 | #include <unistd.h> | ||
11 | 12 | ||
12 | class TickProtocol : public Bu::Protocol | 13 | class TickProtocol : public Bu::Protocol |
13 | { | 14 | { |
diff --git a/src/tests/socketblock.cpp b/src/tests/socketblock.cpp index 2a7dfdc..5dad46c 100644 --- a/src/tests/socketblock.cpp +++ b/src/tests/socketblock.cpp | |||
@@ -9,6 +9,7 @@ | |||
9 | #include "bu/socket.h" | 9 | #include "bu/socket.h" |
10 | #include "bu/serversocket.h" | 10 | #include "bu/serversocket.h" |
11 | #include <stdio.h> | 11 | #include <stdio.h> |
12 | #include <unistd.h> | ||
12 | 13 | ||
13 | class TstServer : public Bu::Ito | 14 | class TstServer : public Bu::Ito |
14 | { | 15 | { |
diff --git a/src/tests/socketbreak.cpp b/src/tests/socketbreak.cpp index e77ae4f..b873830 100644 --- a/src/tests/socketbreak.cpp +++ b/src/tests/socketbreak.cpp | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include "bu/serversocket.h" | 8 | #include "bu/serversocket.h" |
9 | #include "bu/socket.h" | 9 | #include "bu/socket.h" |
10 | #include <unistd.h> | ||
10 | 11 | ||
11 | int main() | 12 | int main() |
12 | { | 13 | { |
diff --git a/src/tests/uuid.cpp b/src/tests/uuid.cpp new file mode 100644 index 0000000..4544543 --- /dev/null +++ b/src/tests/uuid.cpp | |||
@@ -0,0 +1,14 @@ | |||
1 | #include <bu/uuid.h> | ||
2 | #include <bu/sio.h> | ||
3 | |||
4 | using namespace Bu; | ||
5 | |||
6 | int main() | ||
7 | { | ||
8 | Uuid i = Uuid::gen(); | ||
9 | |||
10 | sio << i.toString() << sio.nl; | ||
11 | |||
12 | return 0; | ||
13 | } | ||
14 | |||
diff --git a/src/unit/archive.unit b/src/unit/archive.unit index ecc589b..266784f 100644 --- a/src/unit/archive.unit +++ b/src/unit/archive.unit | |||
@@ -7,14 +7,18 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "bu/membuf.h" | 9 | #include "bu/membuf.h" |
10 | #include "bu/array.h" | ||
11 | #include "bu/archive.h" | ||
12 | |||
13 | using namespace Bu; | ||
10 | 14 | ||
11 | {=Init} | 15 | {=Init} |
12 | 16 | ||
13 | {%testPrimitives} | 17 | {%testPrimitives} |
14 | { | 18 | { |
15 | Bu::MemBuf mb; | 19 | MemBuf mb; |
16 | { | 20 | { |
17 | Bu::Archive ar( mb, Bu::Archive::save ); | 21 | Archive ar( mb, Archive::save ); |
18 | ar << (int8_t)1; | 22 | ar << (int8_t)1; |
19 | ar << (uint8_t)2; | 23 | ar << (uint8_t)2; |
20 | ar << (int16_t)3; | 24 | ar << (int16_t)3; |
@@ -37,7 +41,7 @@ | |||
37 | } | 41 | } |
38 | mb.setPos( 0 ); | 42 | mb.setPos( 0 ); |
39 | { | 43 | { |
40 | Bu::Archive ar( mb, Bu::Archive::load ); | 44 | Archive ar( mb, Archive::load ); |
41 | int8_t p1; | 45 | int8_t p1; |
42 | uint8_t p2; | 46 | uint8_t p2; |
43 | int16_t p3; | 47 | int16_t p3; |
@@ -96,13 +100,13 @@ | |||
96 | } | 100 | } |
97 | } | 101 | } |
98 | 102 | ||
99 | {%testContainers} | 103 | {%testContainers1} |
100 | { | 104 | { |
101 | Bu::MemBuf mb; | 105 | MemBuf mb; |
102 | { | 106 | { |
103 | Bu::Archive ar( mb, Bu::Archive::save ); | 107 | Archive ar( mb, Archive::save ); |
104 | Bu::FString sStr("This is a test string."); | 108 | FString sStr("This is a test string."); |
105 | Bu::List<int> lList; | 109 | List<int> lList; |
106 | lList.append( 10 ); | 110 | lList.append( 10 ); |
107 | lList.append( 20 ); | 111 | lList.append( 20 ); |
108 | lList.append( 30 ); | 112 | lList.append( 30 ); |
@@ -113,14 +117,47 @@ | |||
113 | } | 117 | } |
114 | mb.setPos( 0 ); | 118 | mb.setPos( 0 ); |
115 | { | 119 | { |
116 | Bu::Archive ar( mb, Bu::Archive::load ); | 120 | Archive ar( mb, Archive::load ); |
117 | Bu::FString sStr; | 121 | FString sStr; |
118 | Bu::List<int> lList; | 122 | List<int> lList; |
119 | ar >> sStr; | 123 | ar >> sStr; |
120 | ar >> lList; | 124 | ar >> lList; |
121 | unitTest( sStr == "This is a test string." ); | 125 | unitTest( sStr == "This is a test string." ); |
122 | unitTest( lList.getSize() == 4 ); | 126 | unitTest( lList.getSize() == 4 ); |
123 | Bu::List<int>::iterator i = lList.begin(); | 127 | List<int>::iterator i = lList.begin(); |
128 | unitTest( *i == 10 ); i++; | ||
129 | unitTest( *i == 20 ); i++; | ||
130 | unitTest( *i == 30 ); i++; | ||
131 | unitTest( *i == 40 ); | ||
132 | ar.close(); | ||
133 | } | ||
134 | } | ||
135 | |||
136 | {%testContainers2} | ||
137 | { | ||
138 | MemBuf mb; | ||
139 | { | ||
140 | Archive ar( mb, Archive::save ); | ||
141 | FString sStr("This is a test string."); | ||
142 | Array<int> lArray; | ||
143 | lArray.append( 10 ); | ||
144 | lArray.append( 20 ); | ||
145 | lArray.append( 30 ); | ||
146 | lArray.append( 40 ); | ||
147 | ar << sStr; | ||
148 | ar << lArray; | ||
149 | ar.close(); | ||
150 | } | ||
151 | mb.setPos( 0 ); | ||
152 | { | ||
153 | Archive ar( mb, Archive::load ); | ||
154 | FString sStr; | ||
155 | Array<int> lArray; | ||
156 | ar >> sStr; | ||
157 | ar >> lArray; | ||
158 | unitTest( sStr == "This is a test string." ); | ||
159 | unitTest( lArray.getSize() == 4 ); | ||
160 | Array<int>::iterator i = lArray.begin(); | ||
124 | unitTest( *i == 10 ); i++; | 161 | unitTest( *i == 10 ); i++; |
125 | unitTest( *i == 20 ); i++; | 162 | unitTest( *i == 20 ); i++; |
126 | unitTest( *i == 30 ); i++; | 163 | unitTest( *i == 30 ); i++; |
@@ -128,3 +165,31 @@ | |||
128 | ar.close(); | 165 | ar.close(); |
129 | } | 166 | } |
130 | } | 167 | } |
168 | |||
169 | {%testContainers3} | ||
170 | { | ||
171 | MemBuf mb; | ||
172 | { | ||
173 | Archive ar( mb, Archive::save ); | ||
174 | Array<FString> lArray; | ||
175 | lArray.append( "10" ); | ||
176 | lArray.append( "20" ); | ||
177 | lArray.append( "30" ); | ||
178 | lArray.append( "40" ); | ||
179 | ar << lArray; | ||
180 | ar.close(); | ||
181 | } | ||
182 | mb.setPos( 0 ); | ||
183 | { | ||
184 | Archive ar( mb, Archive::load ); | ||
185 | Array<FString> lArray; | ||
186 | ar >> lArray; | ||
187 | unitTest( lArray.getSize() == 4 ); | ||
188 | Array<FString>::iterator i = lArray.begin(); | ||
189 | unitTest( *i == "10" ); i++; | ||
190 | unitTest( *i == "20" ); i++; | ||
191 | unitTest( *i == "30" ); i++; | ||
192 | unitTest( *i == "40" ); | ||
193 | ar.close(); | ||
194 | } | ||
195 | } | ||
diff --git a/src/unit/file.unit b/src/unit/file.unit index 911d8f6..e0d2005 100644 --- a/src/unit/file.unit +++ b/src/unit/file.unit | |||
@@ -16,7 +16,7 @@ | |||
16 | 16 | ||
17 | {%writeFull} | 17 | {%writeFull} |
18 | { | 18 | { |
19 | Bu::File sf("testfile1", Bu::File::Write ); | 19 | Bu::File sf("testfile1", Bu::File::WriteNew ); |
20 | for( int c = 0; c < 256; c++ ) | 20 | for( int c = 0; c < 256; c++ ) |
21 | { | 21 | { |
22 | unsigned char ch = (unsigned char)c; | 22 | unsigned char ch = (unsigned char)c; |
diff --git a/src/unit/fstring.unit b/src/unit/fstring.unit index 3e4456d..d218a07 100644 --- a/src/unit/fstring.unit +++ b/src/unit/fstring.unit | |||
@@ -312,3 +312,24 @@ | |||
312 | bob = ""; | 312 | bob = ""; |
313 | unitTest( bob.isSet() == false ); | 313 | unitTest( bob.isSet() == false ); |
314 | } | 314 | } |
315 | |||
316 | {%swap1} | ||
317 | { | ||
318 | Bu::FString a, b; | ||
319 | a = "Goodbye"; | ||
320 | b = "Hello"; | ||
321 | Bu::swap( a, b ); | ||
322 | unitTest( a == "Hello" ); | ||
323 | unitTest( b == "Goodbye" ); | ||
324 | } | ||
325 | |||
326 | {%swap2} | ||
327 | { | ||
328 | Bu::FString a, b; | ||
329 | a = "Goodbye"; | ||
330 | b = "Hello"; | ||
331 | std::swap( a, b ); | ||
332 | unitTest( a == "Hello" ); | ||
333 | unitTest( b == "Goodbye" ); | ||
334 | } | ||
335 | |||
diff --git a/src/unit/list.unit b/src/unit/list.unit index 9da0342..9f66f54 100644 --- a/src/unit/list.unit +++ b/src/unit/list.unit | |||
@@ -66,3 +66,83 @@ typedef Bu::List<int> IntList; | |||
66 | } | 66 | } |
67 | } | 67 | } |
68 | 68 | ||
69 | {%sort1} | ||
70 | { | ||
71 | IntList lst; | ||
72 | |||
73 | lst.insertSorted( 5 ); | ||
74 | lst.insertSorted( 1 ); | ||
75 | lst.insertSorted( 10 ); | ||
76 | lst.insertSorted( 3 ); | ||
77 | |||
78 | unitTest( lst == IntList(1).append(3).append(5).append(10) ); | ||
79 | } | ||
80 | |||
81 | {%sort2} | ||
82 | { | ||
83 | IntList lst; | ||
84 | |||
85 | lst.insertSorted<Bu::__basicGTCmp<int> >( 5 ); | ||
86 | lst.insertSorted<Bu::__basicGTCmp<int> >( 1 ); | ||
87 | lst.insertSorted<Bu::__basicGTCmp<int> >( 10 ); | ||
88 | lst.insertSorted<Bu::__basicGTCmp<int> >( 3 ); | ||
89 | |||
90 | unitTest( lst == IntList(10).append(5).append(3).append(1) ); | ||
91 | } | ||
92 | |||
93 | {%sort3} | ||
94 | { | ||
95 | IntList lst; | ||
96 | Bu::__basicGTCmp<int> cmp; | ||
97 | |||
98 | lst.insertSorted( cmp, 5 ); | ||
99 | lst.insertSorted( cmp, 1 ); | ||
100 | lst.insertSorted( cmp, 10 ); | ||
101 | lst.insertSorted( cmp, 3 ); | ||
102 | |||
103 | unitTest( lst == IntList(10).append(5).append(3).append(1) ); | ||
104 | } | ||
105 | |||
106 | {%sort4} | ||
107 | { | ||
108 | IntList lst; | ||
109 | |||
110 | lst.append( 5 ); | ||
111 | lst.append( 1 ); | ||
112 | lst.append( 10 ); | ||
113 | lst.append( 3 ); | ||
114 | |||
115 | lst.sort(); | ||
116 | |||
117 | unitTest( lst == IntList(1).append(3).append(5).append(10) ); | ||
118 | } | ||
119 | |||
120 | {%sort5} | ||
121 | { | ||
122 | IntList lst; | ||
123 | |||
124 | lst.append( 5 ); | ||
125 | lst.append( 1 ); | ||
126 | lst.append( 10 ); | ||
127 | lst.append( 3 ); | ||
128 | |||
129 | lst.sort<Bu::__basicGTCmp<int> >(); | ||
130 | |||
131 | unitTest( lst == IntList(10).append(5).append(3).append(1) ); | ||
132 | } | ||
133 | |||
134 | {%sort6} | ||
135 | { | ||
136 | IntList lst; | ||
137 | |||
138 | lst.append( 5 ); | ||
139 | lst.append( 1 ); | ||
140 | lst.append( 10 ); | ||
141 | lst.append( 3 ); | ||
142 | |||
143 | Bu::__basicGTCmp<int> x; | ||
144 | lst.sort( x ); | ||
145 | |||
146 | unitTest( lst == IntList(10).append(5).append(3).append(1) ); | ||
147 | } | ||
148 | |||
diff --git a/src/util.cpp b/src/util.cpp index 3ca711d..6107bdb 100644 --- a/src/util.cpp +++ b/src/util.cpp | |||
@@ -35,7 +35,24 @@ int Bu::getDaysInMonth( int iMonth, int iYear ) | |||
35 | return 29; | 35 | return 29; |
36 | return 28; | 36 | return 28; |
37 | break; | 37 | break; |
38 | } | ||
39 | 38 | ||
39 | default: | ||
40 | return -1; | ||
41 | } | ||
42 | } | ||
43 | void Bu::memcpy( void *pDest, const void *pSrc, size_t iBytes ) | ||
44 | { | ||
45 | #ifdef VALTEST | ||
46 | const char *src = (const char *)pSrc; | ||
47 | char *dest = (char *)pDest; | ||
48 | for( int j = 0; j < count; j++ ) | ||
49 | { | ||
50 | *dest = *src; | ||
51 | dest++; | ||
52 | src++; | ||
53 | } | ||
54 | #else | ||
55 | ::memcpy( pDest, pSrc, iBytes ); | ||
56 | #endif | ||
40 | } | 57 | } |
41 | 58 | ||
@@ -9,18 +9,20 @@ | |||
9 | #define BU_UTIL_H | 9 | #define BU_UTIL_H |
10 | 10 | ||
11 | #ifndef NULL | 11 | #ifndef NULL |
12 | #define NULL 0 | 12 | # define NULL 0 |
13 | #endif | 13 | #endif |
14 | 14 | ||
15 | /* I borrowed this from someone who borrowed it from glib who borrowed it | 15 | /* I borrowed this from someone who borrowed it from glib who borrowed it |
16 | * from... | 16 | * from... |
17 | */ | 17 | */ |
18 | #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) | 18 | #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) |
19 | #define DEPRECATED __attribute__((__deprecated__)) | 19 | # define DEPRECATED __attribute__((__deprecated__)) |
20 | #else | 20 | #else |
21 | #define DEPRECATED | 21 | # define DEPRECATED |
22 | #endif /* __GNUC__ */ | 22 | #endif /* __GNUC__ */ |
23 | 23 | ||
24 | #include <string.h> | ||
25 | |||
24 | namespace Bu | 26 | namespace Bu |
25 | { | 27 | { |
26 | /** | 28 | /** |
@@ -173,6 +175,8 @@ namespace Bu | |||
173 | * leap years into account. | 175 | * leap years into account. |
174 | */ | 176 | */ |
175 | int getDaysInMonth( int iMonth, int iYear ); | 177 | int getDaysInMonth( int iMonth, int iYear ); |
178 | |||
179 | void memcpy( void *pDest, const void *pSrc, size_t iBytes ); | ||
176 | }; | 180 | }; |
177 | 181 | ||
178 | #endif | 182 | #endif |