autoc 1.3 → 1.4
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 +4 -4
- data/CHANGES +4 -0
- data/doc/AutoC.html +55 -55
- data/doc/AutoC/Code.html +60 -57
- data/doc/AutoC/Collection.html +134 -124
- data/doc/AutoC/HashMap.html +147 -185
- data/doc/AutoC/HashSet.html +114 -325
- data/doc/AutoC/Iterators.html +126 -0
- data/doc/AutoC/Iterators/Bidirectional.html +204 -0
- data/doc/AutoC/Iterators/Unidirectional.html +200 -0
- data/doc/AutoC/List.html +81 -76
- data/doc/AutoC/Maps.html +290 -0
- data/doc/AutoC/Module.html +72 -69
- data/doc/AutoC/Module/File.html +55 -52
- data/doc/AutoC/Module/Header.html +55 -52
- data/doc/AutoC/Module/Source.html +63 -60
- data/doc/AutoC/Priority.html +57 -57
- data/doc/AutoC/Queue.html +75 -74
- data/doc/AutoC/Reference.html +92 -91
- data/doc/AutoC/Sets.html +520 -0
- data/doc/AutoC/String.html +70 -69
- data/doc/AutoC/TreeMap.html +1565 -0
- data/doc/AutoC/TreeSet.html +1447 -0
- data/doc/AutoC/Type.html +184 -110
- data/doc/AutoC/UserDefinedType.html +102 -102
- data/doc/AutoC/Vector.html +100 -91
- data/doc/_index.html +97 -33
- data/doc/class_list.html +24 -31
- data/doc/css/full_list.css +32 -31
- data/doc/css/style.css +220 -78
- data/doc/file.CHANGES.html +37 -30
- data/doc/file.README.html +29 -30
- data/doc/file_list.html +29 -31
- data/doc/frames.html +7 -16
- data/doc/index.html +29 -30
- data/doc/js/app.js +100 -76
- data/doc/js/full_list.js +170 -135
- data/doc/method_list.html +877 -431
- data/doc/top-level-namespace.html +35 -35
- data/lib/autoc.rb +4 -2
- data/lib/autoc/collection.rb +10 -4
- data/lib/autoc/collection/hash_map.rb +22 -41
- data/lib/autoc/collection/hash_set.rb +13 -120
- data/lib/autoc/collection/iterator.rb +39 -0
- data/lib/autoc/collection/list.rb +7 -5
- data/lib/autoc/collection/map.rb +41 -0
- data/lib/autoc/collection/queue.rb +8 -8
- data/lib/autoc/collection/set.rb +134 -0
- data/lib/autoc/collection/tree_map.rb +464 -0
- data/lib/autoc/collection/tree_set.rb +611 -0
- data/lib/autoc/collection/vector.rb +8 -4
- data/lib/autoc/string.rb +1 -1
- data/lib/autoc/type.rb +3 -0
- data/test/test.rb +2 -2
- data/test/test_auto.c +7141 -0
- data/test/test_auto.h +753 -0
- data/test/test_int_tree_set.rb +111 -0
- data/test/test_value_hash_map.rb +1 -1
- data/test/test_value_hash_set.rb +1 -1
- data/test/test_value_tree_map.rb +176 -0
- data/test/test_value_tree_set.rb +173 -0
- metadata +21 -5
@@ -1,12 +1,12 @@
|
|
1
|
-
<!DOCTYPE html
|
2
|
-
|
3
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
4
3
|
<head>
|
5
|
-
<meta
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
6
|
<title>
|
7
7
|
Top Level Namespace
|
8
8
|
|
9
|
-
— Documentation by YARD 0.
|
9
|
+
— Documentation by YARD 0.9.5
|
10
10
|
|
11
11
|
</title>
|
12
12
|
|
@@ -15,9 +15,8 @@
|
|
15
15
|
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
|
16
16
|
|
17
17
|
<script type="text/javascript" charset="utf-8">
|
18
|
-
|
18
|
+
pathId = "";
|
19
19
|
relpath = '';
|
20
|
-
framesUrl = "frames.html#!top-level-namespace.html";
|
21
20
|
</script>
|
22
21
|
|
23
22
|
|
@@ -28,58 +27,58 @@
|
|
28
27
|
|
29
28
|
</head>
|
30
29
|
<body>
|
31
|
-
<div
|
32
|
-
<
|
30
|
+
<div class="nav_wrap">
|
31
|
+
<iframe id="nav" src="class_list.html"></iframe>
|
32
|
+
<div id="resizer"></div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div id="main" tabindex="-1">
|
36
|
+
<div id="header">
|
37
|
+
<div id="menu">
|
33
38
|
|
34
39
|
<a href="_index.html">Index</a> »
|
35
40
|
|
36
41
|
|
37
42
|
<span class="title">Top Level Namespace</span>
|
38
43
|
|
39
|
-
|
40
|
-
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
|
41
44
|
</div>
|
42
45
|
|
43
|
-
|
46
|
+
<div id="search">
|
44
47
|
|
45
48
|
<a class="full_list_link" id="class_list_link"
|
46
49
|
href="class_list.html">
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
</a>
|
54
|
-
|
55
|
-
<a class="full_list_link" id="file_list_link"
|
56
|
-
href="file_list.html">
|
57
|
-
File List
|
50
|
+
|
51
|
+
<svg width="24" height="24">
|
52
|
+
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
53
|
+
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
54
|
+
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
55
|
+
</svg>
|
58
56
|
</a>
|
59
57
|
|
60
58
|
</div>
|
61
|
-
|
62
|
-
|
59
|
+
<div class="clear"></div>
|
60
|
+
</div>
|
63
61
|
|
64
|
-
|
62
|
+
<iframe id="search_frame" src="class_list.html"></iframe>
|
65
63
|
|
66
|
-
|
64
|
+
<div id="content"><h1>Top Level Namespace
|
67
65
|
|
68
66
|
|
69
67
|
|
70
68
|
</h1>
|
69
|
+
<div class="box_info">
|
70
|
+
|
71
71
|
|
72
|
-
<dl class="box">
|
73
72
|
|
74
73
|
|
75
|
-
|
76
74
|
|
77
|
-
|
78
75
|
|
79
76
|
|
77
|
+
|
78
|
+
|
79
|
+
|
80
80
|
|
81
|
-
</
|
82
|
-
<div class="clear"></div>
|
81
|
+
</div>
|
83
82
|
|
84
83
|
<h2>Defined Under Namespace</h2>
|
85
84
|
<p class="children">
|
@@ -102,11 +101,12 @@
|
|
102
101
|
|
103
102
|
</div>
|
104
103
|
|
105
|
-
|
106
|
-
Generated on
|
104
|
+
<div id="footer">
|
105
|
+
Generated on Wed Oct 12 12:27:11 2016 by
|
107
106
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
108
|
-
0.
|
107
|
+
0.9.5 (ruby-2.3.1).
|
109
108
|
</div>
|
110
109
|
|
110
|
+
</div>
|
111
111
|
</body>
|
112
112
|
</html>
|
data/lib/autoc.rb
CHANGED
@@ -22,7 +22,7 @@ Should the major incompatible changes be made, the new release 2.0 will be intro
|
|
22
22
|
|
23
23
|
=end
|
24
24
|
module AutoC
|
25
|
-
VERSION = "1.
|
25
|
+
VERSION = "1.4"
|
26
26
|
end # AutoC
|
27
27
|
|
28
28
|
|
@@ -34,4 +34,6 @@ require "autoc/collection/list"
|
|
34
34
|
require "autoc/collection/queue"
|
35
35
|
require "autoc/collection/vector"
|
36
36
|
require "autoc/collection/hash_set"
|
37
|
-
require "autoc/collection/hash_map"
|
37
|
+
require "autoc/collection/hash_map"
|
38
|
+
require "autoc/collection/tree_set"
|
39
|
+
require "autoc/collection/tree_map"
|
data/lib/autoc/collection.rb
CHANGED
@@ -13,17 +13,23 @@ module AutoC
|
|
13
13
|
|
14
14
|
- {AutoC::Reference} counted reference type
|
15
15
|
|
16
|
+
- {AutoC::String} string builder type with value semantics
|
17
|
+
|
16
18
|
== Implemented collections
|
17
19
|
|
18
20
|
- {AutoC::Vector} resizable array
|
19
21
|
|
20
|
-
- {AutoC::List}
|
22
|
+
- {AutoC::List} singly linked list
|
23
|
+
|
24
|
+
- {AutoC::Queue} doubly linked list
|
25
|
+
|
26
|
+
- {AutoC::HashSet} hash-based unordered set
|
21
27
|
|
22
|
-
- {AutoC::
|
28
|
+
- {AutoC::HashMap} hash-based unordered map
|
23
29
|
|
24
|
-
- {AutoC::
|
30
|
+
- {AutoC::TreeSet} tree-based sorted set
|
25
31
|
|
26
|
-
- {AutoC::
|
32
|
+
- {AutoC::TreeMap} tree-based sorted map
|
27
33
|
|
28
34
|
== Ruby side operation
|
29
35
|
|
@@ -2,12 +2,17 @@ require "autoc/collection"
|
|
2
2
|
require "autoc/collection/hash_set"
|
3
3
|
|
4
4
|
|
5
|
+
require "autoc/collection/map"
|
6
|
+
|
7
|
+
|
5
8
|
module AutoC
|
6
9
|
|
7
10
|
|
8
11
|
=begin
|
9
12
|
|
10
|
-
|
13
|
+
HashMap< *_K_* => *_E_* > is a hash-based unordered random access container holding unique keys with each key having an element bound to it.
|
14
|
+
|
15
|
+
HashMap is backed by {AutoC::HashSet} container.
|
11
16
|
|
12
17
|
The collection's C++ counterpart is +std::unordered_map<>+ template class.
|
13
18
|
|
@@ -129,6 +134,8 @@ Alias for ~it~GetElement().
|
|
129
134
|
=end
|
130
135
|
class HashMap < Collection
|
131
136
|
|
137
|
+
include Maps
|
138
|
+
|
132
139
|
attr_reader :key
|
133
140
|
|
134
141
|
alias :value :element
|
@@ -158,11 +165,6 @@ class HashMap < Collection
|
|
158
165
|
|
159
166
|
def write_intf_types(stream)
|
160
167
|
super
|
161
|
-
stream << %$
|
162
|
-
/***
|
163
|
-
**** #{type}<#{key.type},#{value.type}> (#{self.class})
|
164
|
-
***/
|
165
|
-
$ if public?
|
166
168
|
stream << %$
|
167
169
|
typedef struct #{@entry.type} #{@entry.type};
|
168
170
|
struct #{@entry.type} {
|
@@ -187,45 +189,28 @@ class HashMap < Collection
|
|
187
189
|
def write_intf_decls(stream, declare, define)
|
188
190
|
super
|
189
191
|
stream << %$
|
190
|
-
#{declare} #{ctor.declaration};
|
191
|
-
#{declare} #{dtor.declaration};
|
192
|
-
#{declare} #{copy.declaration};
|
193
|
-
#{declare} #{equal.declaration};
|
194
|
-
#{declare} #{identify.declaration};
|
195
|
-
#{declare} void #{purge}(#{type_ref});
|
196
|
-
#{declare} size_t #{size}(#{type_ref});
|
197
|
-
#define #{empty}(self) (#{size}(self) == 0)
|
198
|
-
#{declare} int #{containsKey}(#{type_ref}, #{key.type});
|
199
|
-
#{declare} #{value.type} #{get}(#{type_ref}, #{key.type});
|
200
|
-
#{declare} int #{put}(#{type_ref}, #{key.type}, #{value.type});
|
201
|
-
#{declare} int #{replace}(#{type_ref}, #{key.type}, #{value.type});
|
202
|
-
#{declare} int #{remove}(#{type_ref}, #{key.type});
|
203
192
|
#{declare} void #{itCtor}(#{it_ref}, #{type_ref});
|
204
|
-
#{declare} int #{itMove}(#{it_ref});
|
205
|
-
#{declare} #{key.type} #{itGetKey}(#{it_ref});
|
206
|
-
#{declare} #{value.type} #{itGetElement}(#{it_ref});
|
207
|
-
#define #{itGet}(it) #{itGetElement}(it)
|
208
193
|
$
|
209
194
|
end
|
210
195
|
|
211
196
|
def write_impls(stream, define)
|
212
197
|
super
|
213
198
|
stream << %$
|
214
|
-
#define
|
215
|
-
#define
|
216
|
-
#define
|
217
|
-
#define
|
199
|
+
#define #{validValue} 1
|
200
|
+
#define #{validKey} 2
|
201
|
+
#define #{ownedValue} 4
|
202
|
+
#define #{ownedKey} 8
|
218
203
|
static #{@entry.type} #{entryKeyOnlyRef}(#{key.type_ref} key) {
|
219
204
|
#{@entry.type} entry;
|
220
205
|
entry.key = *key;
|
221
|
-
entry.flags =
|
206
|
+
entry.flags = #{validKey};
|
222
207
|
return entry;
|
223
208
|
}
|
224
209
|
static #{@entry.type} #{entryKeyValueRef}(#{key.type_ref} key, #{value.type_ref} value) {
|
225
210
|
#{@entry.type} entry;
|
226
211
|
entry.key = *key;
|
227
212
|
entry.value = *value;
|
228
|
-
entry.flags = (
|
213
|
+
entry.flags = (#{validKey} | #{validValue});
|
229
214
|
return entry;
|
230
215
|
}
|
231
216
|
#define #{entryIdentify}(obj) #{entryIdentifyRef}(&obj)
|
@@ -238,19 +223,19 @@ class HashMap < Collection
|
|
238
223
|
}
|
239
224
|
#define #{entryCopy}(dst, src) #{entryCopyRef}(&dst, &src)
|
240
225
|
static void #{entryCopyRef}(#{@entry.type_ref} dst, #{@entry.type_ref} src) {
|
241
|
-
#{assert}(src->flags &
|
242
|
-
dst->flags = (
|
226
|
+
#{assert}(src->flags & #{validKey});
|
227
|
+
dst->flags = (#{validKey} | #{ownedKey});
|
243
228
|
#{key.copy("dst->key", "src->key")};
|
244
|
-
if(src->flags &
|
245
|
-
dst->flags |= (
|
229
|
+
if(src->flags & #{validValue}) {
|
230
|
+
dst->flags |= (#{validValue} | #{ownedValue});
|
246
231
|
#{value.copy("dst->value", "src->value")};
|
247
232
|
}
|
248
233
|
}
|
249
234
|
#define #{entryDtor}(obj) #{entryDtorRef}(&obj)
|
250
235
|
static void #{entryDtorRef}(#{@entry.type}* entry) {
|
251
|
-
#{assert}(entry->flags &
|
252
|
-
if(entry->flags &
|
253
|
-
if(entry->flags &
|
236
|
+
#{assert}(entry->flags & #{validKey});
|
237
|
+
if(entry->flags & #{ownedKey}) #{key.dtor("entry->key")};
|
238
|
+
if(entry->flags & #{validValue} && entry->flags & #{ownedValue}) #{value.dtor("entry->value")};
|
254
239
|
}
|
255
240
|
static #{@entry.type_ref} #{itGetEntryRef}(#{it_ref});
|
256
241
|
static int #{containsAllOf}(#{type_ref} self, #{type_ref} other) {
|
@@ -383,7 +368,7 @@ class HashMap < Collection
|
|
383
368
|
#{value.type} value;
|
384
369
|
#{assert}(self);
|
385
370
|
e = #{itGetEntryRef}(self);
|
386
|
-
#{assert}(e->flags &
|
371
|
+
#{assert}(e->flags & #{validValue});
|
387
372
|
#{value.copy("value", "e->value")};
|
388
373
|
return value;
|
389
374
|
}
|
@@ -391,10 +376,6 @@ class HashMap < Collection
|
|
391
376
|
#{assert}(self);
|
392
377
|
return #{@set.itGetRef}(&self->it);
|
393
378
|
}
|
394
|
-
#undef AUTOC_VALID_VALUE
|
395
|
-
#undef AUTOC_VALID_KEY
|
396
|
-
#undef AUTOC_OWNED_VALUE
|
397
|
-
#undef AUTOC_OWNED_KEY
|
398
379
|
$
|
399
380
|
end
|
400
381
|
|
@@ -2,12 +2,16 @@ require "autoc/collection"
|
|
2
2
|
require "autoc/collection/list"
|
3
3
|
|
4
4
|
|
5
|
+
require "autoc/collection/set"
|
6
|
+
require "autoc/collection/iterator"
|
7
|
+
|
8
|
+
|
5
9
|
module AutoC
|
6
10
|
|
7
11
|
|
8
12
|
=begin
|
9
13
|
|
10
|
-
HashSet is a hash-based unordered container holding unique elements.
|
14
|
+
HashSet< *_E_* > is a hash-based unordered container holding unique elements.
|
11
15
|
|
12
16
|
The collection's C++ counterpart is +std::unordered_set<>+ template class.
|
13
17
|
|
@@ -145,19 +149,21 @@ WARNING: current position *must* be valid otherwise the behavior is undefined. S
|
|
145
149
|
=end
|
146
150
|
class HashSet < Collection
|
147
151
|
|
152
|
+
include Sets
|
153
|
+
include Iterators::Unidirectional
|
154
|
+
|
148
155
|
def initialize(*args)
|
149
156
|
super
|
150
157
|
@list = List.new(list, element, :static)
|
151
158
|
key_requirement(element)
|
152
159
|
end
|
153
160
|
|
161
|
+
def write_intf_decls(stream, declare, define)
|
162
|
+
super
|
163
|
+
end
|
164
|
+
|
154
165
|
def write_intf_types(stream)
|
155
166
|
super
|
156
|
-
stream << %$
|
157
|
-
/***
|
158
|
-
**** #{type}<#{element.type}> (#{self.class})
|
159
|
-
***/
|
160
|
-
$ if public?
|
161
167
|
@list.write_intf_types(stream)
|
162
168
|
stream << %$
|
163
169
|
typedef struct #{type} #{type};
|
@@ -176,38 +182,11 @@ class HashSet < Collection
|
|
176
182
|
$
|
177
183
|
end
|
178
184
|
|
179
|
-
def write_intf_decls(stream, declare, define)
|
180
|
-
super
|
181
|
-
stream << %$
|
182
|
-
#{declare} #{ctor.declaration};
|
183
|
-
#{declare} #{dtor.declaration};
|
184
|
-
#{declare} #{copy.declaration};
|
185
|
-
#{declare} #{equal.declaration};
|
186
|
-
#{declare} #{identify.declaration};
|
187
|
-
#{declare} void #{purge}(#{type_ref});
|
188
|
-
#{declare} int #{contains}(#{type_ref}, #{element.type});
|
189
|
-
#{declare} #{element.type} #{get}(#{type_ref}, #{element.type});
|
190
|
-
#{declare} size_t #{size}(#{type_ref});
|
191
|
-
#define #{empty}(self) (#{size}(self) == 0)
|
192
|
-
#{declare} int #{put}(#{type_ref}, #{element.type});
|
193
|
-
#{declare} int #{replace}(#{type_ref}, #{element.type});
|
194
|
-
#{declare} int #{remove}(#{type_ref}, #{element.type});
|
195
|
-
#{declare} void #{exclude}(#{type_ref}, #{type_ref});
|
196
|
-
#{declare} void #{retain}(#{type_ref}, #{type_ref});
|
197
|
-
#{declare} void #{include}(#{type_ref}, #{type_ref});
|
198
|
-
#{declare} void #{invert}(#{type_ref}, #{type_ref});
|
199
|
-
#{declare} void #{itCtor}(#{it_ref}, #{type_ref});
|
200
|
-
#{declare} int #{itMove}(#{it_ref});
|
201
|
-
#{declare} #{element.type} #{itGet}(#{it_ref});
|
202
|
-
$
|
203
|
-
end
|
204
|
-
|
205
185
|
def write_impls(stream, define)
|
206
|
-
super
|
207
186
|
@list.write_intf_decls(stream, static, inline)
|
208
187
|
@list.write_impls(stream, static)
|
188
|
+
super
|
209
189
|
stream << %$
|
210
|
-
static #{element.type_ref} #{itGetRef}(#{it_ref});
|
211
190
|
static void #{rehash}(#{type_ref} self) {
|
212
191
|
#{@list.type_ref} buckets;
|
213
192
|
size_t index, bucket_count, size, fill;
|
@@ -254,16 +233,6 @@ class HashSet < Collection
|
|
254
233
|
self->bucket_count = bucket_count;
|
255
234
|
self->size = size;
|
256
235
|
}
|
257
|
-
static int #{containsAllOf}(#{type_ref} self, #{type_ref} other) {
|
258
|
-
#{it} it;
|
259
|
-
#{itCtor}(&it, self);
|
260
|
-
while(#{itMove}(&it)) {
|
261
|
-
int found = 0;
|
262
|
-
if(#{contains}(other, *#{itGetRef}(&it))) found = 1;
|
263
|
-
if(!found) return 0;
|
264
|
-
}
|
265
|
-
return 1;
|
266
|
-
}
|
267
236
|
#{define} #{ctor.definition} {
|
268
237
|
#{assert}(self);
|
269
238
|
self->min_bucket_count = 16;
|
@@ -283,31 +252,6 @@ class HashSet < Collection
|
|
283
252
|
}
|
284
253
|
#{free}(self->buckets);
|
285
254
|
}
|
286
|
-
#{define} #{copy.definition} {
|
287
|
-
#{it} it;
|
288
|
-
#{assert}(src);
|
289
|
-
#{assert}(dst);
|
290
|
-
#{ctor}(dst);
|
291
|
-
#{itCtor}(&it, src);
|
292
|
-
while(#{itMove}(&it)) #{put}(dst, *#{itGetRef}(&it));
|
293
|
-
}
|
294
|
-
#{define} #{equal.definition} {
|
295
|
-
#{assert}(lt);
|
296
|
-
#{assert}(rt);
|
297
|
-
return #{size}(lt) == #{size}(rt) && #{containsAllOf}(lt, rt) && #{containsAllOf}(rt, lt);
|
298
|
-
}
|
299
|
-
#{define} #{identify.definition} {
|
300
|
-
#{it} it;
|
301
|
-
size_t result = 0;
|
302
|
-
#{assert}(self);
|
303
|
-
#{itCtor}(&it, self);
|
304
|
-
while(#{itMove}(&it)) {
|
305
|
-
#{element.type}* e = #{itGetRef}(&it);
|
306
|
-
result ^= #{element.identify("*e")};
|
307
|
-
result = AUTOC_RCYCLE(result);
|
308
|
-
}
|
309
|
-
return result;
|
310
|
-
}
|
311
255
|
#{define} void #{purge}(#{type_ref} self) {
|
312
256
|
#{assert}(self);
|
313
257
|
#{dtor}(self);
|
@@ -325,10 +269,6 @@ class HashSet < Collection
|
|
325
269
|
result = #{@list.find}(&self->buckets[#{element.identify("element")} % self->bucket_count], element);
|
326
270
|
return result;
|
327
271
|
}
|
328
|
-
#{define} size_t #{size}(#{type_ref} self) {
|
329
|
-
#{assert}(self);
|
330
|
-
return self->size;
|
331
|
-
}
|
332
272
|
#{define} int #{put}(#{type_ref} self, #{element.type} element) {
|
333
273
|
#{@list.type_ref} bucket;
|
334
274
|
#{assert}(self);
|
@@ -358,53 +298,6 @@ class HashSet < Collection
|
|
358
298
|
}
|
359
299
|
return 0;
|
360
300
|
}
|
361
|
-
#{define} void #{exclude}(#{type_ref} self, #{type_ref} other) {
|
362
|
-
#{it} it;
|
363
|
-
#{assert}(self);
|
364
|
-
#{assert}(other);
|
365
|
-
#{itCtor}(&it, other);
|
366
|
-
while(#{itMove}(&it)) #{remove}(self, *#{itGetRef}(&it));
|
367
|
-
}
|
368
|
-
#{define} void #{include}(#{type_ref} self, #{type_ref} other) {
|
369
|
-
#{it} it;
|
370
|
-
#{assert}(self);
|
371
|
-
#{assert}(other);
|
372
|
-
#{itCtor}(&it, other);
|
373
|
-
while(#{itMove}(&it)) #{put}(self, *#{itGetRef}(&it));
|
374
|
-
}
|
375
|
-
#{define} void #{retain}(#{type_ref} self, #{type_ref} other) {
|
376
|
-
#{it} it;
|
377
|
-
#{type} set;
|
378
|
-
#{assert}(self);
|
379
|
-
#{assert}(other);
|
380
|
-
#{ctor}(&set);
|
381
|
-
#{itCtor}(&it, self);
|
382
|
-
while(#{itMove}(&it)) {
|
383
|
-
#{element.type}* e = #{itGetRef}(&it);
|
384
|
-
if(#{contains}(other, *e)) #{put}(&set, *e);
|
385
|
-
}
|
386
|
-
#{dtor}(self);
|
387
|
-
*self = set;
|
388
|
-
}
|
389
|
-
#{define} void #{invert}(#{type_ref} self, #{type_ref} other) {
|
390
|
-
#{it} it;
|
391
|
-
#{type} set;
|
392
|
-
#{assert}(self);
|
393
|
-
#{assert}(other);
|
394
|
-
#{ctor}(&set);
|
395
|
-
#{itCtor}(&it, self);
|
396
|
-
while(#{itMove}(&it)) {
|
397
|
-
#{element.type}* e = #{itGetRef}(&it);
|
398
|
-
if(!#{contains}(other, *e)) #{put}(&set, *e);
|
399
|
-
}
|
400
|
-
#{itCtor}(&it, other);
|
401
|
-
while(#{itMove}(&it)) {
|
402
|
-
#{element.type}* e = #{itGetRef}(&it);
|
403
|
-
if(!#{contains}(self, *e)) #{put}(&set, *e);
|
404
|
-
}
|
405
|
-
#{dtor}(self);
|
406
|
-
*self = set;
|
407
|
-
}
|
408
301
|
#{define} void #{itCtor}(#{it_ref} self, #{type_ref} set) {
|
409
302
|
#{assert}(self);
|
410
303
|
self->set = set;
|