autoc 1.4 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES.md +3 -0
  3. data/README.md +149 -0
  4. data/cmake/AutoC.cmake +39 -0
  5. data/lib/autoc/allocators.rb +51 -0
  6. data/lib/autoc/association.rb +126 -0
  7. data/lib/autoc/box.rb +311 -0
  8. data/lib/autoc/cmake.rb +54 -0
  9. data/lib/autoc/collection.rb +83 -110
  10. data/lib/autoc/composite.rb +333 -0
  11. data/lib/autoc/cstring.rb +263 -0
  12. data/lib/autoc/function.rb +247 -0
  13. data/lib/autoc/hash_map.rb +328 -0
  14. data/lib/autoc/hash_set.rb +339 -0
  15. data/lib/autoc/hashers.rb +102 -0
  16. data/lib/autoc/list.rb +444 -0
  17. data/lib/autoc/module.rb +434 -0
  18. data/lib/autoc/openmp.rb +15 -0
  19. data/lib/autoc/primitive.rb +27 -0
  20. data/lib/autoc/ranges.rb +707 -0
  21. data/lib/autoc/record.rb +247 -0
  22. data/lib/autoc/scaffold/docs.rb +117 -0
  23. data/lib/autoc/scaffold/generic_value.rb +86 -0
  24. data/lib/autoc/scaffold/project.rb +75 -0
  25. data/lib/autoc/scaffold/test_cstring.rb +113 -0
  26. data/lib/autoc/scaffold/test_cstring_hash_set.rb +35 -0
  27. data/lib/autoc/scaffold/test_int_box.rb +22 -0
  28. data/lib/autoc/scaffold/test_int_hash_set.rb +448 -0
  29. data/lib/autoc/scaffold/test_int_list.rb +106 -0
  30. data/lib/autoc/scaffold/test_int_vector.rb +83 -0
  31. data/lib/autoc/scaffold/test_v2v_hash_map.rb +83 -0
  32. data/lib/autoc/scaffold/test_value_hash_set.rb +60 -0
  33. data/lib/autoc/scaffold/test_value_vector.rb +146 -0
  34. data/{test/test.rb → lib/autoc/scaffold/tests.rb} +179 -158
  35. data/lib/autoc/scaffold.rb +12 -0
  36. data/lib/autoc/sequential.rb +99 -0
  37. data/lib/autoc/set.rb +331 -0
  38. data/lib/autoc/std.rb +149 -0
  39. data/lib/autoc/type.rb +93 -531
  40. data/lib/autoc/vector.rb +290 -0
  41. data/lib/autoc.rb +4 -35
  42. metadata +55 -85
  43. data/.yardopts +0 -4
  44. data/CHANGES +0 -23
  45. data/README +0 -28
  46. data/doc/AutoC/Code.html +0 -523
  47. data/doc/AutoC/Collection.html +0 -1214
  48. data/doc/AutoC/HashMap.html +0 -1441
  49. data/doc/AutoC/HashSet.html +0 -916
  50. data/doc/AutoC/Iterators/Bidirectional.html +0 -204
  51. data/doc/AutoC/Iterators/Unidirectional.html +0 -200
  52. data/doc/AutoC/Iterators.html +0 -126
  53. data/doc/AutoC/List.html +0 -1039
  54. data/doc/AutoC/Maps.html +0 -290
  55. data/doc/AutoC/Module/File.html +0 -415
  56. data/doc/AutoC/Module/Header.html +0 -437
  57. data/doc/AutoC/Module/Source.html +0 -707
  58. data/doc/AutoC/Module.html +0 -948
  59. data/doc/AutoC/Priority.html +0 -138
  60. data/doc/AutoC/Queue.html +0 -1172
  61. data/doc/AutoC/Reference.html +0 -735
  62. data/doc/AutoC/Sets.html +0 -520
  63. data/doc/AutoC/String.html +0 -1394
  64. data/doc/AutoC/TreeMap.html +0 -1565
  65. data/doc/AutoC/TreeSet.html +0 -1447
  66. data/doc/AutoC/Type.html +0 -2148
  67. data/doc/AutoC/UserDefinedType.html +0 -1047
  68. data/doc/AutoC/Vector.html +0 -987
  69. data/doc/AutoC.html +0 -331
  70. data/doc/_index.html +0 -388
  71. data/doc/class_list.html +0 -51
  72. data/doc/css/common.css +0 -1
  73. data/doc/css/full_list.css +0 -58
  74. data/doc/css/style.css +0 -481
  75. data/doc/file.CHANGES.html +0 -117
  76. data/doc/file.README.html +0 -116
  77. data/doc/file_list.html +0 -61
  78. data/doc/frames.html +0 -17
  79. data/doc/index.html +0 -116
  80. data/doc/js/app.js +0 -243
  81. data/doc/js/full_list.js +0 -216
  82. data/doc/js/jquery.js +0 -4
  83. data/doc/method_list.html +0 -1307
  84. data/doc/top-level-namespace.html +0 -112
  85. data/lib/autoc/code.rb +0 -237
  86. data/lib/autoc/collection/hash_map.rb +0 -385
  87. data/lib/autoc/collection/hash_set.rb +0 -337
  88. data/lib/autoc/collection/iterator.rb +0 -39
  89. data/lib/autoc/collection/list.rb +0 -429
  90. data/lib/autoc/collection/map.rb +0 -41
  91. data/lib/autoc/collection/queue.rb +0 -517
  92. data/lib/autoc/collection/set.rb +0 -134
  93. data/lib/autoc/collection/tree_map.rb +0 -464
  94. data/lib/autoc/collection/tree_set.rb +0 -611
  95. data/lib/autoc/collection/vector.rb +0 -336
  96. data/lib/autoc/string.rb +0 -492
  97. data/test/test_auto.c +0 -7141
  98. data/test/test_auto.h +0 -753
  99. data/test/test_char_string.rb +0 -270
  100. data/test/test_int_list.rb +0 -35
  101. data/test/test_int_tree_set.rb +0 -111
  102. data/test/test_int_vector.rb +0 -34
  103. data/test/test_value_hash_map.rb +0 -162
  104. data/test/test_value_hash_set.rb +0 -173
  105. data/test/test_value_list.rb +0 -193
  106. data/test/test_value_queue.rb +0 -275
  107. data/test/test_value_tree_map.rb +0 -176
  108. data/test/test_value_tree_set.rb +0 -173
  109. data/test/test_value_vector.rb +0 -155
  110. data/test/value.rb +0 -80
@@ -1,336 +0,0 @@
1
- require "autoc/collection"
2
-
3
-
4
- require "autoc/collection/iterator"
5
-
6
-
7
- module AutoC
8
-
9
-
10
- =begin
11
-
12
- Vector< *_E_* > is an ordered random access sequence container.
13
-
14
- The collection's C++ counterpart is +std::vector<>+ template class.
15
-
16
- == Generated C interface
17
-
18
- === Collection management
19
-
20
- [cols="2*"]
21
- |===
22
- |*_void_* ~type~Copy(*_Type_* * +dst+, *_Type_* * +src+)
23
- |
24
- Create a new vector +dst+ filled with the contents of +src+.
25
- A copy operation is performed on every element in +src+.
26
-
27
- NOTE: Previous contents of +dst+ is overwritten.
28
-
29
- |*_void_* ~type~Ctor(*_Type_* * +self+, *_size_t_* +size+)
30
- |
31
- Create a new vector +self+ of size +size+.
32
- The elements are initialized with either supplied or generated default parameterless constructor.
33
-
34
- WARNING: +size+ must be greater than zero.
35
-
36
- NOTE: Previous contents of +self+ is overwritten.
37
-
38
- |*_void_* ~type~Dtor(*_Type_* * +self+)
39
- |
40
- Destroy vector +self+.
41
- Stored elements are destroyed as well by calling the respective destructors.
42
-
43
- |*_int_* ~type~Equal(*_Type_* * +lt+, *_Type_* * +rt+)
44
- |
45
- Return non-zero value if vectors +lt+ and +rt+ are considered equal by contents and zero value otherwise.
46
-
47
- |*_size_t_* ~type~Identify(*_Type_* * +self+)
48
- |
49
- Return hash code for vector +self+.
50
- |===
51
-
52
- === Basic operations
53
-
54
- [cols=2*]
55
- |===
56
- |*_E_* ~type~Get(*_Type_* * +self+, *_size_t_* +index+)
57
- |
58
- Return a _copy_ of the element stored in +self+ at position +index+.
59
-
60
- WARNING: +index+ *must* be a valid index otherwise the behavior is undefined. See ~type~Within().
61
-
62
- |*_void_* ~type~Resize(*_Type_* * +self+, *_size_t_* +size+)
63
- |
64
- Set new size of vector +self+ to +size+.
65
-
66
- If new size is greater than the old one, extra elements are created with default parameterless constructors.
67
- If new size is smaller the the old one, excessive elements are destroyed.
68
-
69
- WARNING: +size+ *must* be greater than zero.
70
-
71
- |*_void_* ~type~Set(*_Type_* * +self+, *_size_t_* +index+, *_E_* +what+)
72
- |
73
-
74
- Store a _copy_ of the element +what+ in vector +self+ at position +index+ destroying previous contents.
75
-
76
- WARNING: +index+ *must* be a valid index otherwise the behavior is undefined. See ~type~Within().
77
-
78
- |*_size_t_* ~type~Size(*_Type_* * +self+)
79
- |
80
- Return number of elements stored in vector +self+.
81
-
82
- |*_void_* ~type~Sort(*_Type_* * +self+)
83
- |
84
- Perform an ascending sort.
85
- See ~type~SortEx().
86
-
87
- NOTE : optional operation.
88
-
89
- |*_void_* ~type~SortEx(*_Type_* * +self+, *_int_* ascending)
90
- |
91
- NOTE : optional operation.
92
-
93
- Perform a sort operation on the contents of vector +self+ utilizing either generated of user supplied ordering functions.
94
- If the +ascending+ is non-zero, perform the sorting in ascending order otherwise perform the soring in descending order.
95
-
96
- Note that this operation is defined only if element type is orderable, e.g. has equality testing and comparison operations defined.
97
-
98
- |*_int_* ~type~Within(*_Type_* * +self+, *_size_t_* +index+)
99
- |
100
- Return non-zero value if +index+ is a valid index and zero value otherwise.
101
- Valid index belongs to the range 0 ... ~type~Size()-1.
102
- |===
103
-
104
- === Iteration
105
-
106
- [cols=2*]
107
- |===
108
- |*_void_* ~it~Ctor(*_IteratorType_* * +it+, *_Type_* * +self+)
109
- |
110
- Create a new forward iterator +it+ on vector +self+.
111
-
112
- NOTE: Previous contents of +it+ is overwritten.
113
-
114
- |*_void_* ~it~CtorEx(*_IteratorType_* * +it+, *_Type_* * +self+, *_int_* +forward+)
115
- |
116
- Create a new iterator +it+ on vector +self+.
117
- Non-zero value of +forward+ specifies a forward iterator, zero value specifies a backward iterator.
118
-
119
- NOTE: Previous contents of +it+ is overwritten.
120
-
121
- |*_int_* ~it~Move(*_IteratorType_* * +it+)
122
- |
123
- Advance iterator position of +it+ *and* return non-zero value if new position is valid and zero value otherwise.
124
-
125
- |*_E_* ~it~Get(*_IteratorType_* * +it+)
126
- |
127
- Return a _copy_ of current element pointed to by the iterator +it+.
128
-
129
- WARNING: current position *must* be valid otherwise the behavior is undefined. See ~it~Move().
130
- |===
131
-
132
- =end
133
- class Vector < Collection
134
-
135
- include Iterators::Bidirectional
136
-
137
- def initialize(*args)
138
- super
139
- # Override the default type constructor as the Vector's requires one extra parameter
140
- # Note that this makes the Vector instance non-constructible
141
- @ctor = define_redirector(:ctor, Function::Signature.new([type_ref^:self, :size_t^:element_count]))
142
- end
143
-
144
- # No default constructor provided
145
- def constructible?; false end
146
-
147
- def write_intf_types(stream)
148
- super
149
- stream << %$
150
- /***
151
- **** #{type}<#{element.type}>
152
- ***/
153
- $ if public?
154
- stream << %$
155
- typedef struct #{type} #{type};
156
- typedef struct #{it} #{it};
157
- struct #{type} {
158
- #{element.type_ref} values;
159
- size_t element_count;
160
- };
161
- struct #{it} {
162
- #{type_ref} vector;
163
- int index, forward;
164
- };
165
- $
166
- end
167
-
168
- def write_intf_decls(stream, declare, define)
169
- super(stream, define, define) # Need to make prototypes static inline
170
- stream << %$
171
- #{declare} #{ctor.declaration};
172
- #{declare} #{dtor.declaration};
173
- #{declare} #{copy.declaration};
174
- /* TODO #{copyRange}() */
175
- #{declare} #{equal.declaration};
176
- #{declare} #{identify.declaration};
177
- #{declare} void #{resize}(#{type_ref}, size_t);
178
- #{define} size_t #{size}(#{type_ref} self) {
179
- #{assert}(self);
180
- return self->element_count;
181
- }
182
- #{define} int #{within}(#{type_ref} self, size_t index) {
183
- #{assert}(self);
184
- return index < #{size}(self);
185
- }
186
- #{define} #{element.type} #{get}(#{type_ref} self, size_t index) {
187
- #{element.type} result;
188
- #{assert}(self);
189
- #{assert}(#{within}(self, index));
190
- #{element.copy("result", "self->values[index]")};
191
- return result;
192
- }
193
- #{define} void #{set}(#{type_ref} self, size_t index, #{element.type} value) {
194
- #{assert}(self);
195
- #{assert}(#{within}(self, index));
196
- #{element.dtor("self->values[index]")};
197
- #{element.copy("self->values[index]", "value")};
198
- }
199
- #{define} void #{itCtorEx}(#{it_ref} self, #{type_ref} vector, int forward) {
200
- #{assert}(self);
201
- #{assert}(vector);
202
- self->vector = vector;
203
- self->forward = forward;
204
- self->index = forward ? -1 : #{size}(vector);
205
- }
206
- #{define} int #{itMove}(#{it_ref} self) {
207
- #{assert}(self);
208
- if(self->forward) ++self->index; else --self->index;
209
- return #{within}(self->vector, self->index);
210
- }
211
- #{define} #{element.type} #{itGet}(#{it_ref} self) {
212
- #{assert}(self);
213
- return #{get}(self->vector, self->index);
214
- }
215
- $
216
- stream << %$
217
- #define #{sort}(self) #{sortEx}(self, 1)
218
- #{declare} void #{sortEx}(#{type_ref}, int);
219
- $ if element.orderable?
220
- end
221
-
222
- def write_impls(stream, define)
223
- super
224
- stream << %$
225
- static void #{allocate}(#{type_ref} self, size_t element_count) {
226
- #{assert}(self);
227
- #{assert}(element_count > 0);
228
- self->element_count = element_count;
229
- self->values = (#{element.type}*)#{malloc}(element_count*sizeof(#{element.type})); #{assert}(self->values);
230
- }
231
- #{define} #{ctor.definition} {
232
- size_t index;
233
- #{assert}(self);
234
- #{allocate}(self, element_count);
235
- for(index = 0; index < #{size}(self); ++index) {
236
- #{element.ctor("self->values[index]")};
237
- }
238
- }
239
- #{define} #{dtor.definition} {
240
- size_t index;
241
- #{assert}(self);
242
- for(index = 0; index < #{size}(self); ++index) {
243
- #{element.dtor("self->values[index]")};
244
- }
245
- #{free}(self->values);
246
- }
247
- #{define} #{copy.definition} {
248
- size_t index, size;
249
- #{assert}(src);
250
- #{assert}(dst);
251
- #{allocate}(dst, size = #{size}(src));
252
- for(index = 0; index < size; ++index) {
253
- #{element.copy("dst->values[index]", "src->values[index]")};
254
- }
255
- }
256
- #{define} #{equal.definition} {
257
- size_t index, size;
258
- #{assert}(lt);
259
- #{assert}(rt);
260
- if(#{size}(lt) == (size = #{size}(rt))) {
261
- for(index = 0; index < size; ++index) {
262
- if(!#{element.equal("lt->values[index]", "rt->values[index]")}) return 0;
263
- }
264
- return 1;
265
- } else
266
- return 0;
267
- }
268
- #{define} #{identify.definition} {
269
- size_t index, result = 0;
270
- #{assert}(self);
271
- for(index = 0; index < self->element_count; ++index) {
272
- result ^= #{element.identify("self->values[index]")};
273
- result = AUTOC_RCYCLE(result);
274
- }
275
- return result;
276
- }
277
- #{define} void #{resize}(#{type_ref} self, size_t new_element_count) {
278
- size_t index, element_count, from, to;
279
- #{assert}(self);
280
- if((element_count = #{size}(self)) != new_element_count) {
281
- #{element.type_ref} values = (#{element.type_ref})#{malloc}(new_element_count*sizeof(#{element.type})); #{assert}(values);
282
- from = AUTOC_MIN(element_count, new_element_count);
283
- to = AUTOC_MAX(element_count, new_element_count);
284
- for(index = 0; index < from; ++index) {
285
- values[index] = self->values[index];
286
- }
287
- if(element_count > new_element_count) {
288
- for(index = from; index < to; ++index) {
289
- #{element.dtor("self->values[index]")};
290
- }
291
- } else {
292
- for(index = from; index < to; ++index) {
293
- #{element.ctor("values[index]")};
294
- }
295
- }
296
- #{free}(self->values);
297
- self->values = values;
298
- self->element_count = new_element_count;
299
- }
300
- }
301
- $
302
- stream << %$
303
- static int #{ascend}(void* lp_, void* rp_) {
304
- #{element.type_ref} lp = (#{element.type_ref})lp_;
305
- #{element.type_ref} rp = (#{element.type_ref})rp_;
306
- if(#{element.equal("*lp", "*rp")}) {
307
- return 0;
308
- } else if(#{element.less("*lp", "*rp")}) {
309
- return -1;
310
- } else {
311
- return +1;
312
- }
313
- }
314
- static int #{descend}(void* lp_, void* rp_) {
315
- return -#{ascend}(lp_, rp_);
316
- }
317
- #{define} void #{sortEx}(#{type_ref} self, int ascending) {
318
- typedef int (*F)(const void*, const void*);
319
- #{assert}(self);
320
- qsort(self->values, #{size}(self), sizeof(#{element.type}), ascending ? (F)#{ascend} : (F)#{descend});
321
- }
322
- $ if element.orderable?
323
- end
324
-
325
- private
326
-
327
- def element_requirement(obj)
328
- # Vector requires the element to have default parameterless constructor
329
- raise "type #{obj.type} (#{obj}) must be constructible" unless obj.constructible?
330
- super
331
- end
332
-
333
- end # Vector
334
-
335
-
336
- end # AutoC