autoc 0.8 → 1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README +15 -4
- data/doc/AutoC.html +245 -0
- data/doc/AutoC/Code.html +520 -0
- data/doc/AutoC/Collection.html +923 -0
- data/doc/AutoC/HashMap.html +1161 -0
- data/doc/AutoC/HashSet.html +1122 -0
- data/doc/AutoC/List.html +1002 -0
- data/doc/AutoC/Module.html +951 -0
- data/doc/AutoC/Module/File.html +412 -0
- data/doc/AutoC/Module/Header.html +432 -0
- data/doc/AutoC/Module/Source.html +704 -0
- data/doc/AutoC/Priority.html +138 -0
- data/doc/AutoC/Queue.html +1167 -0
- data/doc/AutoC/Type.html +1152 -0
- data/doc/AutoC/UserDefinedType.html +655 -0
- data/doc/AutoC/Vector.html +856 -0
- data/doc/_index.html +299 -0
- data/doc/class_list.html +54 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +339 -0
- data/doc/file.README.html +112 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +112 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +178 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +605 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/autoc.rb +35 -12
- data/lib/autoc/{code_builder.rb → code.rb} +230 -247
- data/lib/autoc/collection.rb +137 -0
- data/lib/autoc/collection/hash_map.rb +388 -0
- data/lib/autoc/collection/hash_set.rb +433 -0
- data/lib/autoc/collection/list.rb +410 -0
- data/lib/autoc/collection/queue.rb +514 -0
- data/lib/autoc/collection/vector.rb +295 -0
- data/lib/autoc/type.rb +198 -0
- data/test/test.c +921 -396
- data/test/test.h +41 -0
- data/test/test.rb +21 -26
- data/test/test_auto.c +2630 -3961
- data/test/test_auto.h +449 -560
- metadata +50 -17
- data/lib/autoc/data_struct_builder.rb +0 -1794
- data/lib/autoc/type_builder.rb +0 -24
- data/manual/manual.pdf +0 -0
data/test/test_auto.h
CHANGED
@@ -1,561 +1,450 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
Box* element;
|
452
|
-
BoxSetListNode* next_node;
|
453
|
-
};
|
454
|
-
|
455
|
-
typedef struct BoxSet BoxSet;
|
456
|
-
typedef struct BoxSetIt BoxSetIt;
|
457
|
-
struct BoxSet {
|
458
|
-
BoxSetList* buckets;
|
459
|
-
size_t bucket_count, min_bucket_count;
|
460
|
-
size_t size, min_size, max_size;
|
461
|
-
unsigned min_fill, max_fill, capacity_multiplier; /* ?*1e-2 */
|
462
|
-
size_t ref_count;
|
463
|
-
};
|
464
|
-
struct BoxSetIt {
|
465
|
-
BoxSet* set;
|
466
|
-
int bucket_index;
|
467
|
-
BoxSetListIt it;
|
468
|
-
};
|
469
|
-
|
470
|
-
__DATA_STRUCT_EXTERN void BoxSetCtor(BoxSet*);
|
471
|
-
__DATA_STRUCT_EXTERN void BoxSetDtor(BoxSet*);
|
472
|
-
__DATA_STRUCT_EXTERN BoxSet* BoxSetNew(void);
|
473
|
-
__DATA_STRUCT_EXTERN void BoxSetDestroy(BoxSet*);
|
474
|
-
__DATA_STRUCT_EXTERN BoxSet* BoxSetAssign(BoxSet*);
|
475
|
-
__DATA_STRUCT_EXTERN void BoxSetPurge(BoxSet*);
|
476
|
-
__DATA_STRUCT_EXTERN void BoxSetRehash(BoxSet*);
|
477
|
-
__DATA_STRUCT_EXTERN int BoxSetContains(BoxSet*, Box*);
|
478
|
-
__DATA_STRUCT_EXTERN Box* BoxSetGet(BoxSet*, Box*);
|
479
|
-
__DATA_STRUCT_EXTERN size_t BoxSetSize(BoxSet*);
|
480
|
-
__DATA_STRUCT_EXTERN int BoxSetEmpty(BoxSet*);
|
481
|
-
__DATA_STRUCT_EXTERN int BoxSetPut(BoxSet*, Box*);
|
482
|
-
__DATA_STRUCT_EXTERN void BoxSetReplace(BoxSet*, Box*);
|
483
|
-
__DATA_STRUCT_EXTERN int BoxSetRemove(BoxSet*, Box*);
|
484
|
-
__DATA_STRUCT_EXTERN void BoxSetNot(BoxSet*, BoxSet*);
|
485
|
-
__DATA_STRUCT_EXTERN void BoxSetAnd(BoxSet*, BoxSet*);
|
486
|
-
__DATA_STRUCT_EXTERN void BoxSetOr(BoxSet*, BoxSet*);
|
487
|
-
__DATA_STRUCT_EXTERN void BoxSetXor(BoxSet*, BoxSet*);
|
488
|
-
__DATA_STRUCT_EXTERN void BoxSetItCtor(BoxSetIt*, BoxSet*);
|
489
|
-
__DATA_STRUCT_EXTERN int BoxSetItHasNext(BoxSetIt*);
|
490
|
-
__DATA_STRUCT_EXTERN Box* BoxSetItNext(BoxSetIt*);
|
491
|
-
size_t PCharHash(const char*);int PCharEqual(const char*,const char*);IntVector* IntVectorAssign(IntVector*);void IntVectorDestroy(IntVector*);
|
492
|
-
typedef struct PChar2IntVectorMapEntry PChar2IntVectorMapEntry;
|
493
|
-
struct PChar2IntVectorMapEntry {
|
494
|
-
const char* key;
|
495
|
-
IntVector* value;
|
496
|
-
int valid_value;
|
497
|
-
};
|
498
|
-
|
499
|
-
typedef struct PChar2IntVectorMapSetListNode PChar2IntVectorMapSetListNode;
|
500
|
-
typedef struct PChar2IntVectorMapSetList PChar2IntVectorMapSetList;
|
501
|
-
typedef struct PChar2IntVectorMapSetListIt PChar2IntVectorMapSetListIt;
|
502
|
-
struct PChar2IntVectorMapSetList {
|
503
|
-
PChar2IntVectorMapSetListNode* head_node;
|
504
|
-
size_t node_count;
|
505
|
-
size_t ref_count;
|
506
|
-
};
|
507
|
-
struct PChar2IntVectorMapSetListIt {
|
508
|
-
PChar2IntVectorMapSetListNode* next_node;
|
509
|
-
};
|
510
|
-
struct PChar2IntVectorMapSetListNode {
|
511
|
-
PChar2IntVectorMapEntry element;
|
512
|
-
PChar2IntVectorMapSetListNode* next_node;
|
513
|
-
};
|
514
|
-
|
515
|
-
typedef struct PChar2IntVectorMapSet PChar2IntVectorMapSet;
|
516
|
-
typedef struct PChar2IntVectorMapSetIt PChar2IntVectorMapSetIt;
|
517
|
-
struct PChar2IntVectorMapSet {
|
518
|
-
PChar2IntVectorMapSetList* buckets;
|
519
|
-
size_t bucket_count, min_bucket_count;
|
520
|
-
size_t size, min_size, max_size;
|
521
|
-
unsigned min_fill, max_fill, capacity_multiplier; /* ?*1e-2 */
|
522
|
-
size_t ref_count;
|
523
|
-
};
|
524
|
-
struct PChar2IntVectorMapSetIt {
|
525
|
-
PChar2IntVectorMapSet* set;
|
526
|
-
int bucket_index;
|
527
|
-
PChar2IntVectorMapSetListIt it;
|
528
|
-
};
|
529
|
-
|
530
|
-
typedef struct PChar2IntVectorMap PChar2IntVectorMap;
|
531
|
-
typedef struct PChar2IntVectorMapIt PChar2IntVectorMapIt;
|
532
|
-
struct PChar2IntVectorMap {
|
533
|
-
PChar2IntVectorMapSet entries;
|
534
|
-
size_t ref_count;
|
535
|
-
};
|
536
|
-
struct PChar2IntVectorMapIt {
|
537
|
-
PChar2IntVectorMapSetIt it;
|
538
|
-
};
|
539
|
-
|
540
|
-
__DATA_STRUCT_EXTERN void PChar2IntVectorMapCtor(PChar2IntVectorMap*);
|
541
|
-
__DATA_STRUCT_EXTERN void PChar2IntVectorMapDtor(PChar2IntVectorMap*);
|
542
|
-
__DATA_STRUCT_EXTERN PChar2IntVectorMap* PChar2IntVectorMapNew(void);
|
543
|
-
__DATA_STRUCT_EXTERN void PChar2IntVectorMapDestroy(PChar2IntVectorMap*);
|
544
|
-
__DATA_STRUCT_EXTERN PChar2IntVectorMap* PChar2IntVectorMapAssign(PChar2IntVectorMap*);
|
545
|
-
__DATA_STRUCT_EXTERN void PChar2IntVectorMapPurge(PChar2IntVectorMap*);
|
546
|
-
__DATA_STRUCT_EXTERN void PChar2IntVectorMapRehash(PChar2IntVectorMap*);
|
547
|
-
__DATA_STRUCT_EXTERN size_t PChar2IntVectorMapSize(PChar2IntVectorMap*);
|
548
|
-
__DATA_STRUCT_EXTERN int PChar2IntVectorMapEmpty(PChar2IntVectorMap*);
|
549
|
-
__DATA_STRUCT_EXTERN int PChar2IntVectorMapContainsKey(PChar2IntVectorMap*, const char*);
|
550
|
-
__DATA_STRUCT_EXTERN IntVector* PChar2IntVectorMapGet(PChar2IntVectorMap*, const char*);
|
551
|
-
__DATA_STRUCT_EXTERN int PChar2IntVectorMapPut(PChar2IntVectorMap*, const char*, IntVector*);
|
552
|
-
__DATA_STRUCT_EXTERN void PChar2IntVectorMapReplace(PChar2IntVectorMap*, const char*, IntVector*);
|
553
|
-
__DATA_STRUCT_EXTERN int PChar2IntVectorMapRemove(PChar2IntVectorMap*, const char*);
|
554
|
-
__DATA_STRUCT_EXTERN void PChar2IntVectorMapItCtor(PChar2IntVectorMapIt*, PChar2IntVectorMap*);
|
555
|
-
__DATA_STRUCT_EXTERN int PChar2IntVectorMapItHasNext(PChar2IntVectorMapIt*);
|
556
|
-
__DATA_STRUCT_EXTERN const char* PChar2IntVectorMapItNextKey(PChar2IntVectorMapIt*);
|
557
|
-
__DATA_STRUCT_EXTERN IntVector* PChar2IntVectorMapItNextValue(PChar2IntVectorMapIt*);
|
558
|
-
__DATA_STRUCT_EXTERN PChar2IntVectorMapEntry PChar2IntVectorMapItNext(PChar2IntVectorMapIt*);
|
559
|
-
|
560
|
-
#endif
|
561
|
-
|
2
|
+
/* AUTOMATICALLY GENERATED HEADER FILE. DO NOT MODIFY. */
|
3
|
+
#ifndef TEST_AUTO_H
|
4
|
+
#define TEST_AUTO_H
|
5
|
+
|
6
|
+
#ifndef AUTOC_INLINE
|
7
|
+
#ifdef _MSC_VER
|
8
|
+
#define AUTOC_INLINE __inline
|
9
|
+
#elif __STDC_VERSION__ >= 199901L
|
10
|
+
#define AUTOC_INLINE inline AUTOC_STATIC
|
11
|
+
#else
|
12
|
+
#define AUTOC_INLINE AUTOC_STATIC
|
13
|
+
#endif
|
14
|
+
#endif
|
15
|
+
#ifndef AUTOC_EXTERN
|
16
|
+
#ifdef __cplusplus
|
17
|
+
#define AUTOC_EXTERN extern "C"
|
18
|
+
#else
|
19
|
+
#define AUTOC_EXTERN extern
|
20
|
+
#endif
|
21
|
+
#endif
|
22
|
+
#ifndef AUTOC_STATIC
|
23
|
+
#ifdef _MSC_VER
|
24
|
+
#define AUTOC_STATIC __pragma(warning(suppress:4100)) static
|
25
|
+
#elif defined(__GNUC__)
|
26
|
+
#define AUTOC_STATIC __attribute__((__used__)) static
|
27
|
+
#else
|
28
|
+
#define AUTOC_STATIC static
|
29
|
+
#endif
|
30
|
+
#endif
|
31
|
+
#include <stddef.h>
|
32
|
+
#include <stdlib.h>
|
33
|
+
#include <assert.h>
|
34
|
+
|
35
|
+
#include "test.h"
|
36
|
+
|
37
|
+
/***
|
38
|
+
**** IntStrMap<int,const char*> (AutoC::HashMap)
|
39
|
+
***/
|
40
|
+
|
41
|
+
typedef struct IntStrMapEntry IntStrMapEntry;
|
42
|
+
struct IntStrMapEntry {
|
43
|
+
int key;
|
44
|
+
const char* value;
|
45
|
+
unsigned flags;
|
46
|
+
};
|
47
|
+
|
48
|
+
typedef struct IntStrMapSetListNode IntStrMapSetListNode;
|
49
|
+
typedef struct IntStrMapSetList IntStrMapSetList;
|
50
|
+
typedef struct IntStrMapSetListIt IntStrMapSetListIt;
|
51
|
+
struct IntStrMapSetList {
|
52
|
+
IntStrMapSetListNode* head_node;
|
53
|
+
size_t node_count;
|
54
|
+
};
|
55
|
+
struct IntStrMapSetListIt {
|
56
|
+
int start;
|
57
|
+
IntStrMapSetList* list;
|
58
|
+
IntStrMapSetListNode* this_node;
|
59
|
+
};
|
60
|
+
struct IntStrMapSetListNode {
|
61
|
+
IntStrMapEntry element;
|
62
|
+
IntStrMapSetListNode* next_node;
|
63
|
+
};
|
64
|
+
|
65
|
+
typedef struct IntStrMapSet IntStrMapSet;
|
66
|
+
typedef struct IntStrMapSetIt IntStrMapSetIt;
|
67
|
+
struct IntStrMapSet {
|
68
|
+
IntStrMapSetList* buckets;
|
69
|
+
size_t bucket_count, min_bucket_count;
|
70
|
+
size_t size, min_size, max_size;
|
71
|
+
unsigned min_fill, max_fill, capacity_multiplier; /* ?*1e-2 */
|
72
|
+
};
|
73
|
+
struct IntStrMapSetIt {
|
74
|
+
IntStrMapSet* set;
|
75
|
+
int bucket_index;
|
76
|
+
IntStrMapSetListIt it;
|
77
|
+
};
|
78
|
+
|
79
|
+
typedef struct IntStrMap IntStrMap;
|
80
|
+
typedef struct IntStrMapIt IntStrMapIt;
|
81
|
+
struct IntStrMap {
|
82
|
+
IntStrMapSet entries;
|
83
|
+
};
|
84
|
+
struct IntStrMapIt {
|
85
|
+
IntStrMapSetIt it;
|
86
|
+
};
|
87
|
+
|
88
|
+
AUTOC_EXTERN void IntStrMapCtor(IntStrMap*);
|
89
|
+
AUTOC_EXTERN void IntStrMapDtor(IntStrMap*);
|
90
|
+
AUTOC_EXTERN void IntStrMapCopy(IntStrMap*, IntStrMap*);
|
91
|
+
AUTOC_EXTERN int IntStrMapEqual(IntStrMap*, IntStrMap*);
|
92
|
+
AUTOC_EXTERN size_t IntStrMapIdentify(IntStrMap*);
|
93
|
+
AUTOC_EXTERN void IntStrMapPurge(IntStrMap*);
|
94
|
+
AUTOC_EXTERN size_t IntStrMapSize(IntStrMap*);
|
95
|
+
#define IntStrMapEmpty(self) (IntStrMapSize(self) == 0)
|
96
|
+
AUTOC_EXTERN int IntStrMapContainsKey(IntStrMap*, int);
|
97
|
+
AUTOC_EXTERN const char* IntStrMapGet(IntStrMap*, int);
|
98
|
+
AUTOC_EXTERN int IntStrMapPut(IntStrMap*, int, const char*);
|
99
|
+
AUTOC_EXTERN int IntStrMapReplace(IntStrMap*, int, const char*);
|
100
|
+
AUTOC_EXTERN int IntStrMapRemove(IntStrMap*, int);
|
101
|
+
AUTOC_EXTERN void IntStrMapItCtor(IntStrMapIt*, IntStrMap*);
|
102
|
+
AUTOC_EXTERN int IntStrMapItMove(IntStrMapIt*);
|
103
|
+
AUTOC_EXTERN int IntStrMapItGetKey(IntStrMapIt*);
|
104
|
+
AUTOC_EXTERN const char* IntStrMapItGetElement(IntStrMapIt*);
|
105
|
+
#define IntStrMapItGet(it) IntStrMapItGetElement(it)
|
106
|
+
|
107
|
+
/***
|
108
|
+
**** IntSet<int> (AutoC::HashSet)
|
109
|
+
***/
|
110
|
+
|
111
|
+
typedef struct IntSetListNode IntSetListNode;
|
112
|
+
typedef struct IntSetList IntSetList;
|
113
|
+
typedef struct IntSetListIt IntSetListIt;
|
114
|
+
struct IntSetList {
|
115
|
+
IntSetListNode* head_node;
|
116
|
+
size_t node_count;
|
117
|
+
};
|
118
|
+
struct IntSetListIt {
|
119
|
+
int start;
|
120
|
+
IntSetList* list;
|
121
|
+
IntSetListNode* this_node;
|
122
|
+
};
|
123
|
+
struct IntSetListNode {
|
124
|
+
int element;
|
125
|
+
IntSetListNode* next_node;
|
126
|
+
};
|
127
|
+
|
128
|
+
typedef struct IntSet IntSet;
|
129
|
+
typedef struct IntSetIt IntSetIt;
|
130
|
+
struct IntSet {
|
131
|
+
IntSetList* buckets;
|
132
|
+
size_t bucket_count, min_bucket_count;
|
133
|
+
size_t size, min_size, max_size;
|
134
|
+
unsigned min_fill, max_fill, capacity_multiplier; /* ?*1e-2 */
|
135
|
+
};
|
136
|
+
struct IntSetIt {
|
137
|
+
IntSet* set;
|
138
|
+
int bucket_index;
|
139
|
+
IntSetListIt it;
|
140
|
+
};
|
141
|
+
|
142
|
+
AUTOC_EXTERN void IntSetCtor(IntSet*);
|
143
|
+
AUTOC_EXTERN void IntSetDtor(IntSet*);
|
144
|
+
AUTOC_EXTERN void IntSetCopy(IntSet*, IntSet*);
|
145
|
+
AUTOC_EXTERN int IntSetEqual(IntSet*, IntSet*);
|
146
|
+
AUTOC_EXTERN size_t IntSetIdentify(IntSet*);
|
147
|
+
AUTOC_EXTERN void IntSetPurge(IntSet*);
|
148
|
+
AUTOC_EXTERN int IntSetContains(IntSet*, int);
|
149
|
+
AUTOC_EXTERN int IntSetGet(IntSet*, int);
|
150
|
+
AUTOC_EXTERN size_t IntSetSize(IntSet*);
|
151
|
+
#define IntSetEmpty(self) (IntSetSize(self) == 0)
|
152
|
+
AUTOC_EXTERN int IntSetPut(IntSet*, int);
|
153
|
+
AUTOC_EXTERN int IntSetReplace(IntSet*, int);
|
154
|
+
AUTOC_EXTERN int IntSetRemove(IntSet*, int);
|
155
|
+
AUTOC_EXTERN void IntSetExclude(IntSet*, IntSet*);
|
156
|
+
AUTOC_EXTERN void IntSetRetain(IntSet*, IntSet*);
|
157
|
+
AUTOC_EXTERN void IntSetInclude(IntSet*, IntSet*);
|
158
|
+
AUTOC_EXTERN void IntSetInvert(IntSet*, IntSet*);
|
159
|
+
AUTOC_EXTERN void IntSetItCtor(IntSetIt*, IntSet*);
|
160
|
+
AUTOC_EXTERN int IntSetItMove(IntSetIt*);
|
161
|
+
AUTOC_EXTERN int IntSetItGet(IntSetIt*);
|
162
|
+
|
163
|
+
/***
|
164
|
+
**** ValueTypeQueue<ValueType> (AutoC::Queue)
|
165
|
+
***/
|
166
|
+
|
167
|
+
typedef struct ValueTypeQueueNode ValueTypeQueueNode;
|
168
|
+
typedef struct ValueTypeQueue ValueTypeQueue;
|
169
|
+
typedef struct ValueTypeQueueIt ValueTypeQueueIt;
|
170
|
+
struct ValueTypeQueue {
|
171
|
+
ValueTypeQueueNode* head_node;
|
172
|
+
ValueTypeQueueNode* tail_node;
|
173
|
+
size_t node_count;
|
174
|
+
};
|
175
|
+
struct ValueTypeQueueIt {
|
176
|
+
int start, forward;
|
177
|
+
ValueTypeQueue* queue;
|
178
|
+
ValueTypeQueueNode* this_node;
|
179
|
+
};
|
180
|
+
struct ValueTypeQueueNode {
|
181
|
+
ValueType element;
|
182
|
+
ValueTypeQueueNode* prev_node;
|
183
|
+
ValueTypeQueueNode* next_node;
|
184
|
+
};
|
185
|
+
|
186
|
+
AUTOC_EXTERN void ValueTypeQueueCtor(ValueTypeQueue*);
|
187
|
+
AUTOC_EXTERN void ValueTypeQueueDtor(ValueTypeQueue*);
|
188
|
+
AUTOC_EXTERN void ValueTypeQueueCopy(ValueTypeQueue*, ValueTypeQueue*);
|
189
|
+
AUTOC_EXTERN int ValueTypeQueueEqual(ValueTypeQueue*, ValueTypeQueue*);
|
190
|
+
AUTOC_EXTERN size_t ValueTypeQueueIdentify(ValueTypeQueue*);
|
191
|
+
AUTOC_EXTERN void ValueTypeQueuePurge(ValueTypeQueue*);
|
192
|
+
#define ValueTypeQueuePeek(self) ValueTypeQueuePeekHead(self)
|
193
|
+
AUTOC_EXTERN ValueType ValueTypeQueuePeekHead(ValueTypeQueue*);
|
194
|
+
AUTOC_EXTERN ValueType ValueTypeQueuePeekTail(ValueTypeQueue*);
|
195
|
+
#define ValueTypeQueuePush(self, element) ValueTypeQueuePushTail(self, element)
|
196
|
+
AUTOC_EXTERN void ValueTypeQueuePushTail(ValueTypeQueue*, ValueType);
|
197
|
+
AUTOC_EXTERN void ValueTypeQueuePushHead(ValueTypeQueue*, ValueType);
|
198
|
+
#define ValueTypeQueuePop(self) ValueTypeQueuePopHead(self)
|
199
|
+
AUTOC_EXTERN ValueType ValueTypeQueuePopHead(ValueTypeQueue*);
|
200
|
+
AUTOC_EXTERN ValueType ValueTypeQueuePopTail(ValueTypeQueue*);
|
201
|
+
AUTOC_EXTERN int ValueTypeQueueContains(ValueTypeQueue*, ValueType);
|
202
|
+
AUTOC_EXTERN ValueType ValueTypeQueueFind(ValueTypeQueue*, ValueType);
|
203
|
+
#define ValueTypeQueueReplace(self, with) ValueTypeQueueReplaceEx(self, with, 1)
|
204
|
+
#define ValueTypeQueueReplaceAll(self, with) ValueTypeQueueReplaceEx(self, with, -1)
|
205
|
+
AUTOC_EXTERN int ValueTypeQueueReplaceEx(ValueTypeQueue*, ValueType, int);
|
206
|
+
#define ValueTypeQueueRemove(self, what) ValueTypeQueueRemoveEx(self, what, 1)
|
207
|
+
#define ValueTypeQueueRemoveAll(self, what) ValueTypeQueueRemoveEx(self, what, -1)
|
208
|
+
AUTOC_EXTERN int ValueTypeQueueRemoveEx(ValueTypeQueue*, ValueType, int);
|
209
|
+
AUTOC_EXTERN size_t ValueTypeQueueSize(ValueTypeQueue*);
|
210
|
+
#define ValueTypeQueueEmpty(self) (ValueTypeQueueSize(self) == 0)
|
211
|
+
AUTOC_EXTERN void ValueTypeQueueItCtor(ValueTypeQueueIt*, ValueTypeQueue*);
|
212
|
+
#define ValueTypeQueueItCtor(self, type) ValueTypeQueueItCtorEx(self, type, 1)
|
213
|
+
AUTOC_EXTERN void ValueTypeQueueItCtorEx(ValueTypeQueueIt*, ValueTypeQueue*, int);
|
214
|
+
AUTOC_EXTERN int ValueTypeQueueItMove(ValueTypeQueueIt*);
|
215
|
+
AUTOC_EXTERN ValueType ValueTypeQueueItGet(ValueTypeQueueIt*);
|
216
|
+
|
217
|
+
/***
|
218
|
+
**** ValueTypeList<ValueType> (AutoC::List)
|
219
|
+
***/
|
220
|
+
|
221
|
+
typedef struct ValueTypeListNode ValueTypeListNode;
|
222
|
+
typedef struct ValueTypeList ValueTypeList;
|
223
|
+
typedef struct ValueTypeListIt ValueTypeListIt;
|
224
|
+
struct ValueTypeList {
|
225
|
+
ValueTypeListNode* head_node;
|
226
|
+
size_t node_count;
|
227
|
+
};
|
228
|
+
struct ValueTypeListIt {
|
229
|
+
int start;
|
230
|
+
ValueTypeList* list;
|
231
|
+
ValueTypeListNode* this_node;
|
232
|
+
};
|
233
|
+
struct ValueTypeListNode {
|
234
|
+
ValueType element;
|
235
|
+
ValueTypeListNode* next_node;
|
236
|
+
};
|
237
|
+
|
238
|
+
AUTOC_EXTERN void ValueTypeListCtor(ValueTypeList*);
|
239
|
+
AUTOC_EXTERN void ValueTypeListDtor(ValueTypeList*);
|
240
|
+
AUTOC_EXTERN void ValueTypeListCopy(ValueTypeList*, ValueTypeList*);
|
241
|
+
AUTOC_EXTERN int ValueTypeListEqual(ValueTypeList*, ValueTypeList*);
|
242
|
+
AUTOC_EXTERN size_t ValueTypeListIdentify(ValueTypeList*);
|
243
|
+
AUTOC_EXTERN void ValueTypeListPurge(ValueTypeList*);
|
244
|
+
AUTOC_EXTERN ValueType ValueTypeListPeek(ValueTypeList*);
|
245
|
+
AUTOC_EXTERN ValueType ValueTypeListPop(ValueTypeList*);
|
246
|
+
AUTOC_EXTERN void ValueTypeListPush(ValueTypeList*, ValueType);
|
247
|
+
AUTOC_EXTERN int ValueTypeListContains(ValueTypeList*, ValueType);
|
248
|
+
AUTOC_EXTERN ValueType ValueTypeListFind(ValueTypeList*, ValueType);
|
249
|
+
#define ValueTypeListReplace(self, with) ValueTypeListReplaceEx(self, with, 1)
|
250
|
+
#define ValueTypeListReplaceAll(self, with) ValueTypeListReplaceEx(self, with, -1)
|
251
|
+
AUTOC_EXTERN int ValueTypeListReplaceEx(ValueTypeList*, ValueType, int);
|
252
|
+
#define ValueTypeListRemove(self, what) ValueTypeListRemoveEx(self, what, 1)
|
253
|
+
#define ValueTypeListRemoveAll(self, what) ValueTypeListRemoveEx(self, what, -1)
|
254
|
+
AUTOC_EXTERN int ValueTypeListRemoveEx(ValueTypeList*, ValueType, int);
|
255
|
+
AUTOC_EXTERN size_t ValueTypeListSize(ValueTypeList*);
|
256
|
+
#define ValueTypeListEmpty(self) (ValueTypeListSize(self) == 0)
|
257
|
+
AUTOC_EXTERN void ValueTypeListItCtor(ValueTypeListIt*, ValueTypeList*);
|
258
|
+
AUTOC_EXTERN int ValueTypeListItMove(ValueTypeListIt*);
|
259
|
+
AUTOC_EXTERN ValueType ValueTypeListItGet(ValueTypeListIt*);
|
260
|
+
|
261
|
+
/***
|
262
|
+
**** ValueTypeSet<ValueType> (AutoC::HashSet)
|
263
|
+
***/
|
264
|
+
|
265
|
+
typedef struct ValueTypeSetListNode ValueTypeSetListNode;
|
266
|
+
typedef struct ValueTypeSetList ValueTypeSetList;
|
267
|
+
typedef struct ValueTypeSetListIt ValueTypeSetListIt;
|
268
|
+
struct ValueTypeSetList {
|
269
|
+
ValueTypeSetListNode* head_node;
|
270
|
+
size_t node_count;
|
271
|
+
};
|
272
|
+
struct ValueTypeSetListIt {
|
273
|
+
int start;
|
274
|
+
ValueTypeSetList* list;
|
275
|
+
ValueTypeSetListNode* this_node;
|
276
|
+
};
|
277
|
+
struct ValueTypeSetListNode {
|
278
|
+
ValueType element;
|
279
|
+
ValueTypeSetListNode* next_node;
|
280
|
+
};
|
281
|
+
|
282
|
+
typedef struct ValueTypeSet ValueTypeSet;
|
283
|
+
typedef struct ValueTypeSetIt ValueTypeSetIt;
|
284
|
+
struct ValueTypeSet {
|
285
|
+
ValueTypeSetList* buckets;
|
286
|
+
size_t bucket_count, min_bucket_count;
|
287
|
+
size_t size, min_size, max_size;
|
288
|
+
unsigned min_fill, max_fill, capacity_multiplier; /* ?*1e-2 */
|
289
|
+
};
|
290
|
+
struct ValueTypeSetIt {
|
291
|
+
ValueTypeSet* set;
|
292
|
+
int bucket_index;
|
293
|
+
ValueTypeSetListIt it;
|
294
|
+
};
|
295
|
+
|
296
|
+
AUTOC_EXTERN void ValueTypeSetCtor(ValueTypeSet*);
|
297
|
+
AUTOC_EXTERN void ValueTypeSetDtor(ValueTypeSet*);
|
298
|
+
AUTOC_EXTERN void ValueTypeSetCopy(ValueTypeSet*, ValueTypeSet*);
|
299
|
+
AUTOC_EXTERN int ValueTypeSetEqual(ValueTypeSet*, ValueTypeSet*);
|
300
|
+
AUTOC_EXTERN size_t ValueTypeSetIdentify(ValueTypeSet*);
|
301
|
+
AUTOC_EXTERN void ValueTypeSetPurge(ValueTypeSet*);
|
302
|
+
AUTOC_EXTERN int ValueTypeSetContains(ValueTypeSet*, ValueType);
|
303
|
+
AUTOC_EXTERN ValueType ValueTypeSetGet(ValueTypeSet*, ValueType);
|
304
|
+
AUTOC_EXTERN size_t ValueTypeSetSize(ValueTypeSet*);
|
305
|
+
#define ValueTypeSetEmpty(self) (ValueTypeSetSize(self) == 0)
|
306
|
+
AUTOC_EXTERN int ValueTypeSetPut(ValueTypeSet*, ValueType);
|
307
|
+
AUTOC_EXTERN int ValueTypeSetReplace(ValueTypeSet*, ValueType);
|
308
|
+
AUTOC_EXTERN int ValueTypeSetRemove(ValueTypeSet*, ValueType);
|
309
|
+
AUTOC_EXTERN void ValueTypeSetExclude(ValueTypeSet*, ValueTypeSet*);
|
310
|
+
AUTOC_EXTERN void ValueTypeSetRetain(ValueTypeSet*, ValueTypeSet*);
|
311
|
+
AUTOC_EXTERN void ValueTypeSetInclude(ValueTypeSet*, ValueTypeSet*);
|
312
|
+
AUTOC_EXTERN void ValueTypeSetInvert(ValueTypeSet*, ValueTypeSet*);
|
313
|
+
AUTOC_EXTERN void ValueTypeSetItCtor(ValueTypeSetIt*, ValueTypeSet*);
|
314
|
+
AUTOC_EXTERN int ValueTypeSetItMove(ValueTypeSetIt*);
|
315
|
+
AUTOC_EXTERN ValueType ValueTypeSetItGet(ValueTypeSetIt*);
|
316
|
+
|
317
|
+
/***
|
318
|
+
**** ValueTypeMap<ValueType,ValueType> (AutoC::HashMap)
|
319
|
+
***/
|
320
|
+
|
321
|
+
typedef struct ValueTypeMapEntry ValueTypeMapEntry;
|
322
|
+
struct ValueTypeMapEntry {
|
323
|
+
ValueType key;
|
324
|
+
ValueType value;
|
325
|
+
unsigned flags;
|
326
|
+
};
|
327
|
+
|
328
|
+
typedef struct ValueTypeMapSetListNode ValueTypeMapSetListNode;
|
329
|
+
typedef struct ValueTypeMapSetList ValueTypeMapSetList;
|
330
|
+
typedef struct ValueTypeMapSetListIt ValueTypeMapSetListIt;
|
331
|
+
struct ValueTypeMapSetList {
|
332
|
+
ValueTypeMapSetListNode* head_node;
|
333
|
+
size_t node_count;
|
334
|
+
};
|
335
|
+
struct ValueTypeMapSetListIt {
|
336
|
+
int start;
|
337
|
+
ValueTypeMapSetList* list;
|
338
|
+
ValueTypeMapSetListNode* this_node;
|
339
|
+
};
|
340
|
+
struct ValueTypeMapSetListNode {
|
341
|
+
ValueTypeMapEntry element;
|
342
|
+
ValueTypeMapSetListNode* next_node;
|
343
|
+
};
|
344
|
+
|
345
|
+
typedef struct ValueTypeMapSet ValueTypeMapSet;
|
346
|
+
typedef struct ValueTypeMapSetIt ValueTypeMapSetIt;
|
347
|
+
struct ValueTypeMapSet {
|
348
|
+
ValueTypeMapSetList* buckets;
|
349
|
+
size_t bucket_count, min_bucket_count;
|
350
|
+
size_t size, min_size, max_size;
|
351
|
+
unsigned min_fill, max_fill, capacity_multiplier; /* ?*1e-2 */
|
352
|
+
};
|
353
|
+
struct ValueTypeMapSetIt {
|
354
|
+
ValueTypeMapSet* set;
|
355
|
+
int bucket_index;
|
356
|
+
ValueTypeMapSetListIt it;
|
357
|
+
};
|
358
|
+
|
359
|
+
typedef struct ValueTypeMap ValueTypeMap;
|
360
|
+
typedef struct ValueTypeMapIt ValueTypeMapIt;
|
361
|
+
struct ValueTypeMap {
|
362
|
+
ValueTypeMapSet entries;
|
363
|
+
};
|
364
|
+
struct ValueTypeMapIt {
|
365
|
+
ValueTypeMapSetIt it;
|
366
|
+
};
|
367
|
+
|
368
|
+
AUTOC_EXTERN void ValueTypeMapCtor(ValueTypeMap*);
|
369
|
+
AUTOC_EXTERN void ValueTypeMapDtor(ValueTypeMap*);
|
370
|
+
AUTOC_EXTERN void ValueTypeMapCopy(ValueTypeMap*, ValueTypeMap*);
|
371
|
+
AUTOC_EXTERN int ValueTypeMapEqual(ValueTypeMap*, ValueTypeMap*);
|
372
|
+
AUTOC_EXTERN size_t ValueTypeMapIdentify(ValueTypeMap*);
|
373
|
+
AUTOC_EXTERN void ValueTypeMapPurge(ValueTypeMap*);
|
374
|
+
AUTOC_EXTERN size_t ValueTypeMapSize(ValueTypeMap*);
|
375
|
+
#define ValueTypeMapEmpty(self) (ValueTypeMapSize(self) == 0)
|
376
|
+
AUTOC_EXTERN int ValueTypeMapContainsKey(ValueTypeMap*, ValueType);
|
377
|
+
AUTOC_EXTERN ValueType ValueTypeMapGet(ValueTypeMap*, ValueType);
|
378
|
+
AUTOC_EXTERN int ValueTypeMapPut(ValueTypeMap*, ValueType, ValueType);
|
379
|
+
AUTOC_EXTERN int ValueTypeMapReplace(ValueTypeMap*, ValueType, ValueType);
|
380
|
+
AUTOC_EXTERN int ValueTypeMapRemove(ValueTypeMap*, ValueType);
|
381
|
+
AUTOC_EXTERN void ValueTypeMapItCtor(ValueTypeMapIt*, ValueTypeMap*);
|
382
|
+
AUTOC_EXTERN int ValueTypeMapItMove(ValueTypeMapIt*);
|
383
|
+
AUTOC_EXTERN ValueType ValueTypeMapItGetKey(ValueTypeMapIt*);
|
384
|
+
AUTOC_EXTERN ValueType ValueTypeMapItGetElement(ValueTypeMapIt*);
|
385
|
+
#define ValueTypeMapItGet(it) ValueTypeMapItGetElement(it)
|
386
|
+
|
387
|
+
/***
|
388
|
+
**** ValueTypeVector<ValueType> (AutoC::Vector)
|
389
|
+
***/
|
390
|
+
|
391
|
+
typedef struct ValueTypeVector ValueTypeVector;
|
392
|
+
typedef struct ValueTypeVectorIt ValueTypeVectorIt;
|
393
|
+
struct ValueTypeVector {
|
394
|
+
ValueType* values;
|
395
|
+
size_t element_count;
|
396
|
+
};
|
397
|
+
struct ValueTypeVectorIt {
|
398
|
+
ValueTypeVector* vector;
|
399
|
+
int index;
|
400
|
+
int forward;
|
401
|
+
};
|
402
|
+
|
403
|
+
AUTOC_EXTERN void ValueTypeVectorCtor(ValueTypeVector*, size_t);
|
404
|
+
AUTOC_EXTERN void ValueTypeVectorDtor(ValueTypeVector*);
|
405
|
+
AUTOC_EXTERN void ValueTypeVectorCopy(ValueTypeVector*, ValueTypeVector*);
|
406
|
+
AUTOC_EXTERN int ValueTypeVectorEqual(ValueTypeVector*, ValueTypeVector*);
|
407
|
+
AUTOC_EXTERN void ValueTypeVectorResize(ValueTypeVector*, size_t);
|
408
|
+
AUTOC_EXTERN size_t ValueTypeVectorIdentify(ValueTypeVector*);
|
409
|
+
AUTOC_INLINE size_t ValueTypeVectorSize(ValueTypeVector* self) {
|
410
|
+
assert(self);
|
411
|
+
return self->element_count;
|
412
|
+
}
|
413
|
+
AUTOC_INLINE int ValueTypeVectorWithin(ValueTypeVector* self, size_t index) {
|
414
|
+
assert(self);
|
415
|
+
return index < ValueTypeVectorSize(self);
|
416
|
+
}
|
417
|
+
AUTOC_INLINE ValueType ValueTypeVectorGet(ValueTypeVector* self, size_t index) {
|
418
|
+
ValueType result;
|
419
|
+
assert(self);
|
420
|
+
assert(ValueTypeVectorWithin(self, index));
|
421
|
+
ValueTypeCopy(result, self->values[index]);
|
422
|
+
return result;
|
423
|
+
}
|
424
|
+
AUTOC_INLINE void ValueTypeVectorSet(ValueTypeVector* self, size_t index, ValueType value) {
|
425
|
+
assert(self);
|
426
|
+
assert(ValueTypeVectorWithin(self, index));
|
427
|
+
ValueTypeDtor(self->values[index]);
|
428
|
+
ValueTypeCopy(self->values[index], value);
|
429
|
+
}
|
430
|
+
AUTOC_EXTERN void ValueTypeVectorSort(ValueTypeVector*);
|
431
|
+
#define ValueTypeVectorItCtor(self, type) ValueTypeVectorItCtorEx(self, type, 1)
|
432
|
+
AUTOC_INLINE void ValueTypeVectorItCtorEx(ValueTypeVectorIt* self, ValueTypeVector* vector, int forward) {
|
433
|
+
assert(self);
|
434
|
+
assert(vector);
|
435
|
+
self->vector = vector;
|
436
|
+
self->forward = forward;
|
437
|
+
self->index = forward ? -1 : ValueTypeVectorSize(vector);
|
438
|
+
}
|
439
|
+
AUTOC_INLINE int ValueTypeVectorItMove(ValueTypeVectorIt* self) {
|
440
|
+
assert(self);
|
441
|
+
if(self->forward) ++self->index;
|
442
|
+
else --self->index;
|
443
|
+
return ValueTypeVectorWithin(self->vector, self->index);
|
444
|
+
}
|
445
|
+
AUTOC_INLINE ValueType ValueTypeVectorItGet(ValueTypeVectorIt* self) {
|
446
|
+
assert(self);
|
447
|
+
return ValueTypeVectorGet(self->vector, self->index);
|
448
|
+
}
|
449
|
+
|
450
|
+
#endif
|