wongi-engine 0.4.0.pre.alpha9 → 0.4.0.pre.alpha10
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/lib/wongi-engine/beta/aggregate_node.rb +1 -2
- data/lib/wongi-engine/dsl/action/statement_generator.rb +3 -17
- data/lib/wongi-engine/generator_tracker.rb +32 -0
- data/lib/wongi-engine/join_results.rb +80 -0
- data/lib/wongi-engine/network.rb +0 -1
- data/lib/wongi-engine/overlay.rb +65 -171
- data/lib/wongi-engine/token.rb +1 -34
- data/lib/wongi-engine/version.rb +1 -1
- data/lib/wongi-engine.rb +2 -0
- data/spec/overlay_spec.rb +0 -5
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0dc2418ab6ffabbb410e83db899bed0479fc5912ec24bc6bf5c01f40ca306aa1
|
4
|
+
data.tar.gz: 4f22e6752c8dfe568eaae071cc7d10b062dee6ddaf8c8ddb2dc201773b7378a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f0d335b747ae2495a2cb259d4d538cb4b66f7f97fabb41ffd8c7dc78750df54c04990e60eea1913155388488d867e7090c71aee1ae647d0fdcf20447c455e00
|
7
|
+
data.tar.gz: d1db63d17198447da1f6761897cda0e5db7af1dc880203146e0deae4c30de89fe0486049ece689e1394d773a9bac79c67cc85ecf45a2655eee84ec25eab7855a
|
@@ -57,9 +57,8 @@ module Wongi::Engine
|
|
57
57
|
[tokens]
|
58
58
|
end
|
59
59
|
|
60
|
-
|
61
60
|
groups.each do |tokens|
|
62
|
-
aggregated =
|
61
|
+
aggregated = aggregate.call(tokens.map(&map))
|
63
62
|
assignment = { var => aggregated }
|
64
63
|
children = child ? [child] : self.children
|
65
64
|
tokens.each do |token|
|
@@ -3,8 +3,6 @@ require "set"
|
|
3
3
|
module Wongi::Engine
|
4
4
|
module DSL::Action
|
5
5
|
class StatementGenerator < BaseAction
|
6
|
-
GeneratorOrigin = Struct.new(:token, :action)
|
7
|
-
|
8
6
|
attr_reader :template
|
9
7
|
private :template
|
10
8
|
|
@@ -23,9 +21,7 @@ module Wongi::Engine
|
|
23
21
|
production.tracer.trace(action: self, wme: wme) if production.tracer
|
24
22
|
|
25
23
|
if should_assert?(wme, token)
|
26
|
-
|
27
|
-
token.generated_wmes << wme
|
28
|
-
overlay.assert(wme, generator: origin)
|
24
|
+
overlay.assert(wme, generator: token)
|
29
25
|
end
|
30
26
|
end
|
31
27
|
|
@@ -47,24 +43,14 @@ module Wongi::Engine
|
|
47
43
|
|
48
44
|
next unless token.wme
|
49
45
|
|
50
|
-
overlay.generators(token.wme).each do |
|
51
|
-
tokens_to_consider.push(
|
46
|
+
overlay.generators(token.wme).each do |generating_token|
|
47
|
+
tokens_to_consider.push(generating_token) unless considered_tokens.include?(generating_token)
|
52
48
|
end
|
53
49
|
end
|
54
50
|
|
55
51
|
# we could not prove that the new WME should not be asserted
|
56
52
|
true
|
57
53
|
end
|
58
|
-
|
59
|
-
def deexecute(token)
|
60
|
-
# p deexecute: {token:}
|
61
|
-
origin = GeneratorOrigin.new(token, self)
|
62
|
-
|
63
|
-
generated = token.generated_wmes.dup # select { overlay.generators(_1).include?(origin) }
|
64
|
-
generated.each do |wme|
|
65
|
-
overlay.retract wme, generator: origin
|
66
|
-
end
|
67
|
-
end
|
68
54
|
end
|
69
55
|
end
|
70
56
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Wongi::Engine
|
2
|
+
class GeneratorTracker
|
3
|
+
def initialize
|
4
|
+
@by_wme = Hash.new { |h, k| h[k] = Set.new }
|
5
|
+
@by_token = Hash.new { |h, k| h[k] = Set.new }
|
6
|
+
end
|
7
|
+
|
8
|
+
def add(wme, token)
|
9
|
+
@by_wme[wme].add(token)
|
10
|
+
@by_token[token.object_id].add(wme)
|
11
|
+
end
|
12
|
+
|
13
|
+
def for_wme(wme)
|
14
|
+
@by_wme.has_key?(wme) ? @by_wme[wme] : Set.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def for_token(token)
|
18
|
+
@by_token.has_key?(token.object_id) ? @by_token[token.object_id] : Set.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def remove_token(token)
|
22
|
+
wmes = for_token(token)
|
23
|
+
@by_token.delete(token.object_id)
|
24
|
+
wmes.each do |wme|
|
25
|
+
next unless @by_wme.key?(wme)
|
26
|
+
|
27
|
+
@by_wme[wme].delete(token)
|
28
|
+
@by_wme.delete(wme) if @by_wme[wme].empty?
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module Wongi::Engine
|
2
|
+
class JoinResults
|
3
|
+
attr_reader :by_wme, :by_token, :hidden
|
4
|
+
private :by_wme, :by_token
|
5
|
+
private :hidden
|
6
|
+
def initialize
|
7
|
+
@by_wme = Hash.new { |h, k| h[k] = {} }
|
8
|
+
@by_token = Hash.new { |h, k| h[k] = {} }
|
9
|
+
@hidden = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def for(wme: nil, token: nil)
|
13
|
+
if wme
|
14
|
+
by_wme.key?(wme) ? by_wme[wme].keys : []
|
15
|
+
elsif token
|
16
|
+
by_token.key?(token.object_id) ? by_token[token.object_id].keys : []
|
17
|
+
else
|
18
|
+
[]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def has?(jr)
|
23
|
+
by_wme.key?(jr.wme) && by_wme[jr.wme].key?(jr)
|
24
|
+
end
|
25
|
+
|
26
|
+
def hidden?(jr)
|
27
|
+
hidden.key?(jr)
|
28
|
+
end
|
29
|
+
|
30
|
+
def add(jr)
|
31
|
+
if hidden.key?(jr)
|
32
|
+
hidden.delete(jr)
|
33
|
+
else
|
34
|
+
by_wme[jr.wme][jr] = true
|
35
|
+
by_token[jr.token.object_id][jr] = true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def remove(jr)
|
40
|
+
unless has?(jr)
|
41
|
+
hide(jr)
|
42
|
+
return
|
43
|
+
end
|
44
|
+
|
45
|
+
if by_wme.key?(jr.wme)
|
46
|
+
by_wme[jr.wme].delete(jr)
|
47
|
+
if by_wme[jr.wme].empty?
|
48
|
+
by_wme.delete(jr.wme)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
if by_token.key?(jr.token.object_id)
|
53
|
+
by_token[jr.token.object_id].delete(jr)
|
54
|
+
if by_token[jr.token.object_id].empty?
|
55
|
+
by_token.delete(jr.token.object_id)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def hide(jr)
|
61
|
+
hidden[jr] = true
|
62
|
+
end
|
63
|
+
|
64
|
+
def remove_token(token)
|
65
|
+
return unless by_token.key?(token.object_id)
|
66
|
+
|
67
|
+
by_token[token.object_id].keys.each do |jr|
|
68
|
+
remove(jr)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def remove_wme(wme)
|
73
|
+
return unless by_wme.key?(wme)
|
74
|
+
|
75
|
+
by_wme[wme].keys do |jr|
|
76
|
+
remove(jr)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
data/lib/wongi-engine/network.rb
CHANGED
data/lib/wongi-engine/overlay.rb
CHANGED
@@ -1,92 +1,13 @@
|
|
1
1
|
module Wongi::Engine
|
2
2
|
class Overlay
|
3
|
-
class JoinResults
|
4
|
-
attr_reader :by_wme, :by_token, :hidden
|
5
|
-
private :by_wme, :by_token
|
6
|
-
private :hidden
|
7
|
-
def initialize
|
8
|
-
@by_wme = Hash.new { |h, k| h[k] = {} }
|
9
|
-
@by_token = Hash.new { |h, k| h[k] = {} }
|
10
|
-
@hidden = {}
|
11
|
-
end
|
12
|
-
|
13
|
-
def for(wme: nil, token: nil)
|
14
|
-
if wme
|
15
|
-
by_wme.key?(wme) ? by_wme[wme].keys : []
|
16
|
-
elsif token
|
17
|
-
by_token.key?(token.object_id) ? by_token[token.object_id].keys : []
|
18
|
-
else
|
19
|
-
[]
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def has?(jr)
|
24
|
-
by_wme.key?(jr.wme) && by_wme[jr.wme].key?(jr)
|
25
|
-
end
|
26
|
-
|
27
|
-
def hidden?(jr)
|
28
|
-
hidden.key?(jr)
|
29
|
-
end
|
30
|
-
|
31
|
-
def add(jr)
|
32
|
-
if hidden.key?(jr)
|
33
|
-
hidden.delete(jr)
|
34
|
-
else
|
35
|
-
by_wme[jr.wme][jr] = true
|
36
|
-
by_token[jr.token.object_id][jr] = true
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def remove(jr)
|
41
|
-
unless has?(jr)
|
42
|
-
hide(jr)
|
43
|
-
return
|
44
|
-
end
|
45
|
-
|
46
|
-
if by_wme.key?(jr.wme)
|
47
|
-
by_wme[jr.wme].delete(jr)
|
48
|
-
if by_wme[jr.wme].empty?
|
49
|
-
by_wme.delete(jr.wme)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
if by_token.key?(jr.token.object_id)
|
54
|
-
by_token[jr.token.object_id].delete(jr)
|
55
|
-
if by_token[jr.token.object_id].empty?
|
56
|
-
by_token.delete(jr.token.object_id)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def hide(jr)
|
62
|
-
hidden[jr] = true
|
63
|
-
end
|
64
3
|
|
65
|
-
|
66
|
-
return unless by_token.key?(token.object_id)
|
67
|
-
|
68
|
-
by_token[token.object_id].keys.each do |jr|
|
69
|
-
remove(jr)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def remove_wme(wme)
|
74
|
-
return unless by_wme.key?(wme)
|
75
|
-
|
76
|
-
by_wme[wme].keys do |jr|
|
77
|
-
remove(jr)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
attr_reader :rete, :parent, :wmes, :tokens, :indexes, :queue, :hidden_parent_wmes, :hidden_parent_tokens, :wme_generators, :hidden_parent_wme_generators, :wme_manual, :hidden_parent_wme_manual, :neg_join_results, :opt_join_results, :ncc_tokens, :ncc_tokens_owner, :hidden_ncc_tokens
|
4
|
+
attr_reader :rete, :parent, :wmes, :tokens, :indexes, :queue, :hidden_parent_wmes, :hidden_parent_tokens, :generator_tracker, :wme_manual, :hidden_parent_wme_manual, :neg_join_results, :opt_join_results, :ncc_tokens, :ncc_tokens_owner, :hidden_ncc_tokens
|
83
5
|
private :wmes, :tokens
|
84
6
|
private :indexes
|
85
7
|
private :queue
|
86
8
|
private :hidden_parent_wmes
|
87
9
|
private :hidden_parent_tokens
|
88
|
-
private :
|
89
|
-
private :hidden_parent_wme_generators
|
10
|
+
private :generator_tracker
|
90
11
|
private :wme_manual
|
91
12
|
private :hidden_parent_wme_manual
|
92
13
|
private :neg_join_results
|
@@ -111,10 +32,9 @@ module Wongi::Engine
|
|
111
32
|
@hidden_parent_wmes = {}
|
112
33
|
|
113
34
|
@tokens = Hash.new { |h, k| h[k] = [] }
|
114
|
-
@hidden_parent_tokens =
|
35
|
+
@hidden_parent_tokens = Set.new
|
115
36
|
|
116
|
-
@
|
117
|
-
@hidden_parent_wme_generators = {}
|
37
|
+
@generator_tracker = GeneratorTracker.new
|
118
38
|
|
119
39
|
@wme_manual = {}
|
120
40
|
@hidden_parent_wme_manual = {}
|
@@ -140,14 +60,6 @@ module Wongi::Engine
|
|
140
60
|
parent.ancestor?(other)
|
141
61
|
end
|
142
62
|
|
143
|
-
def dispose!
|
144
|
-
return if default?
|
145
|
-
|
146
|
-
tokens.each do |_node, tokens|
|
147
|
-
tokens.each(&:dispose!)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
63
|
def <<(thing)
|
152
64
|
case thing
|
153
65
|
when Array
|
@@ -180,19 +92,23 @@ module Wongi::Engine
|
|
180
92
|
def run_queue
|
181
93
|
until queue.empty?
|
182
94
|
operation, wme, options = queue.shift
|
95
|
+
|
183
96
|
case operation
|
184
97
|
when :assert
|
185
|
-
|
98
|
+
existing_wme = find_ignoring_hidden(wme)
|
99
|
+
wme = existing_wme || wme
|
186
100
|
visible = !find(wme).nil?
|
187
101
|
add_wme(wme, **options)
|
188
102
|
rete.real_assert(wme) unless visible
|
103
|
+
|
189
104
|
when :retract
|
190
105
|
wme = find_ignoring_hidden(wme)
|
191
|
-
|
106
|
+
if wme # it's perhaps better to return quietly, because complicated cascades may delete a WME while we're going through the queue
|
107
|
+
visible = !find(wme).nil?
|
108
|
+
remove_wme(wme, **options)
|
109
|
+
rete.real_retract(wme) if visible
|
110
|
+
end
|
192
111
|
|
193
|
-
visible = !find(wme).nil?
|
194
|
-
remove_wme(wme, **options)
|
195
|
-
rete.real_retract(wme) if visible
|
196
112
|
end
|
197
113
|
end
|
198
114
|
end
|
@@ -248,28 +164,26 @@ module Wongi::Engine
|
|
248
164
|
generators(wme).any?
|
249
165
|
end
|
250
166
|
|
251
|
-
def
|
252
|
-
|
167
|
+
def generators(wme)
|
168
|
+
own_generators = generator_tracker.for_wme(wme)
|
169
|
+
parent_generators =
|
253
170
|
if parent
|
254
|
-
parent.
|
171
|
+
parent.generators(wme).reject { |t| hidden_token?(t) }.to_set
|
255
172
|
else
|
256
|
-
|
173
|
+
Set.new
|
257
174
|
end
|
175
|
+
own_generators.union(parent_generators)
|
258
176
|
end
|
259
177
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
own_generators = wme_generators.key?(wme) ? wme_generators[wme] : []
|
266
|
-
parent_generators =
|
267
|
-
if parent
|
268
|
-
parent.generators(wme).reject { |g| hidden_parent_wme_generators.key?(g) }
|
178
|
+
def generated_wmes(token)
|
179
|
+
own_wmes = generator_tracker.for_token(token)
|
180
|
+
parent_wmes =
|
181
|
+
if parent && !hidden_token?(token)
|
182
|
+
parent.generated_wmes(token).reject { hidden_wme?(_1) }.to_set
|
269
183
|
else
|
270
|
-
|
184
|
+
Set.new
|
271
185
|
end
|
272
|
-
|
186
|
+
own_wmes.union(parent_wmes)
|
273
187
|
end
|
274
188
|
|
275
189
|
private def own_manual?(wme)
|
@@ -277,7 +191,7 @@ module Wongi::Engine
|
|
277
191
|
end
|
278
192
|
|
279
193
|
private def own_generated?(wme)
|
280
|
-
|
194
|
+
generator_tracker.for_wme(wme).any?
|
281
195
|
end
|
282
196
|
|
283
197
|
private def find_wme(wme)
|
@@ -285,9 +199,11 @@ module Wongi::Engine
|
|
285
199
|
end
|
286
200
|
|
287
201
|
private def find_own_wme(wme)
|
288
|
-
|
202
|
+
has_own_wme?(wme) ? wme : nil
|
289
203
|
end
|
290
204
|
|
205
|
+
private def has_own_wme?(wme) = wmes.include?(wme)
|
206
|
+
|
291
207
|
private def find_parents_wme(wme)
|
292
208
|
return unless parent
|
293
209
|
|
@@ -332,32 +248,17 @@ module Wongi::Engine
|
|
332
248
|
|
333
249
|
# if we previously hid this locally, unhide it
|
334
250
|
hidden_parent_wmes.delete(wme)
|
335
|
-
if generator
|
336
|
-
hidden_parent_wme_generators.delete(generator)
|
337
|
-
else
|
338
|
-
hidden_parent_wme_manual.delete(wme)
|
339
|
-
end
|
340
251
|
|
341
|
-
|
342
|
-
if generator
|
343
|
-
wme_generators[wme] << generator unless own_generated_by?(wme, generator)
|
344
|
-
else
|
345
|
-
wme_manual[wme] = true
|
346
|
-
end
|
347
|
-
elsif find_parents_wme(wme)
|
348
|
-
if generator
|
349
|
-
wme_generators[wme] << generator unless generated_by?(wme, generator)
|
350
|
-
else
|
351
|
-
wme_manual[wme] = true unless manual?(wme)
|
352
|
-
end
|
353
|
-
else
|
252
|
+
unless has_own_wme?(wme)
|
354
253
|
wmes.add(wme)
|
355
254
|
indexes.each { _1.add(wme) }
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
255
|
+
end
|
256
|
+
|
257
|
+
if generator
|
258
|
+
generator_tracker.add(wme, generator)
|
259
|
+
else
|
260
|
+
hidden_parent_wme_manual.delete(wme)
|
261
|
+
wme_manual[wme] = true
|
361
262
|
end
|
362
263
|
end
|
363
264
|
|
@@ -365,15 +266,9 @@ module Wongi::Engine
|
|
365
266
|
# p remove_wme: { wme:, generator: !!generator }
|
366
267
|
|
367
268
|
if find_own_wme(wme)
|
368
|
-
if generator
|
369
|
-
if own_generated_by?(wme, generator)
|
370
|
-
wme_generators[wme].delete(generator)
|
371
|
-
wme_generators.delete(wme) if wme_generators[wme].empty?
|
372
|
-
end
|
373
|
-
elsif own_manual?(wme)
|
374
|
-
wme_manual.delete(wme)
|
375
|
-
end
|
269
|
+
wme_manual.delete(wme) if generator.nil?
|
376
270
|
|
271
|
+
# no remaining reasons to keep this WME around
|
377
272
|
if !own_generated?(wme) && !own_manual?(wme)
|
378
273
|
wmes.delete(wme)
|
379
274
|
indexes.each { _1.remove(wme) }
|
@@ -388,23 +283,10 @@ module Wongi::Engine
|
|
388
283
|
|
389
284
|
# must be parents' then
|
390
285
|
|
391
|
-
if generator
|
392
|
-
|
393
|
-
if
|
394
|
-
|
395
|
-
wme_generators.delete(wme) if wme_generators[wme].empty?
|
396
|
-
end
|
397
|
-
# if we're still generated, hide parents'
|
398
|
-
if generated_by?(wme, generator)
|
399
|
-
hidden_parent_wme_generators[generator] = true
|
400
|
-
end
|
401
|
-
else
|
402
|
-
if own_manual?(wme)
|
403
|
-
wme_manual.delete(wme)
|
404
|
-
end
|
405
|
-
if manual?(wme)
|
406
|
-
hidden_parent_wme_manual[wme] = true
|
407
|
-
end
|
286
|
+
if generator.nil?
|
287
|
+
wme_manual.delete(wme)
|
288
|
+
# if still manual, it must be from the parent
|
289
|
+
hidden_parent_wme_manual[wme] = true if manual?(wme)
|
408
290
|
end
|
409
291
|
|
410
292
|
if !manual?(wme) && !generated?(wme)
|
@@ -416,7 +298,8 @@ module Wongi::Engine
|
|
416
298
|
# p add_token: {token:}
|
417
299
|
# TODO: is this really likely to happen? we don't normally restore deleted tokens but rather create new ones in the activation
|
418
300
|
if hidden_token?(token)
|
419
|
-
|
301
|
+
puts "odd case"
|
302
|
+
unhide_token(token)
|
420
303
|
return
|
421
304
|
end
|
422
305
|
|
@@ -425,9 +308,12 @@ module Wongi::Engine
|
|
425
308
|
|
426
309
|
def remove_token(token)
|
427
310
|
# p remove_token: {token:}
|
311
|
+
|
312
|
+
wmes = generated_wmes(token)
|
313
|
+
|
428
314
|
if own_node_tokens(token.node).find { _1.equal?(token) }.nil?
|
429
315
|
if parents_node_tokens(token.node).find { _1.equal?(token) }
|
430
|
-
|
316
|
+
hide_token(token)
|
431
317
|
|
432
318
|
# do not hide JRs from the WME side: it will be done in the alpha deactivation and the JRs have to stay visible until then
|
433
319
|
parent_neg_join_results_for(token: token).each { neg_join_results.hide(_1) }
|
@@ -437,10 +323,12 @@ module Wongi::Engine
|
|
437
323
|
hidden_ncc_tokens[token][ncc] = true
|
438
324
|
end
|
439
325
|
end
|
440
|
-
|
326
|
+
else
|
327
|
+
remove_own_token(token)
|
441
328
|
end
|
442
329
|
|
443
|
-
|
330
|
+
wmes.each { retract(_1, generator: token) }
|
331
|
+
|
444
332
|
end
|
445
333
|
|
446
334
|
def remove_own_token(token)
|
@@ -448,6 +336,7 @@ module Wongi::Engine
|
|
448
336
|
tokens[token.node.object_id].delete(token)
|
449
337
|
neg_join_results.remove_token(token)
|
450
338
|
opt_join_results.remove_token(token)
|
339
|
+
generator_tracker.remove_token(token)
|
451
340
|
|
452
341
|
# if this is an NCC partner token
|
453
342
|
if (owner = ncc_tokens_owner[token])
|
@@ -465,9 +354,6 @@ module Wongi::Engine
|
|
465
354
|
end
|
466
355
|
ncc_tokens.delete(token)
|
467
356
|
hidden_ncc_tokens.delete(token)
|
468
|
-
|
469
|
-
# we know we are the owner, and nobody wants it anymore, so this is the safe place to do it
|
470
|
-
token.dispose!
|
471
357
|
end
|
472
358
|
|
473
359
|
def node_tokens(beta)
|
@@ -482,7 +368,7 @@ module Wongi::Engine
|
|
482
368
|
|
483
369
|
private def parents_node_tokens(beta)
|
484
370
|
if parent
|
485
|
-
parent.node_tokens(beta).reject {
|
371
|
+
parent.node_tokens(beta).reject { hidden_token?(_1) }
|
486
372
|
else
|
487
373
|
[]
|
488
374
|
end
|
@@ -581,7 +467,15 @@ module Wongi::Engine
|
|
581
467
|
end
|
582
468
|
|
583
469
|
private def hidden_token?(token)
|
584
|
-
hidden_parent_tokens.
|
470
|
+
hidden_parent_tokens.include?(token.object_id)
|
471
|
+
end
|
472
|
+
|
473
|
+
private def hide_token(token)
|
474
|
+
hidden_parent_tokens.add(token.object_id)
|
475
|
+
end
|
476
|
+
|
477
|
+
private def unhide_token(token)
|
478
|
+
hidden_parent_tokens.delete(token.object_id)
|
585
479
|
end
|
586
480
|
end
|
587
481
|
end
|
data/lib/wongi-engine/token.rb
CHANGED
@@ -2,16 +2,13 @@ require 'set'
|
|
2
2
|
|
3
3
|
module Wongi::Engine
|
4
4
|
class Token
|
5
|
-
attr_reader :wme, :node, :
|
5
|
+
attr_reader :wme, :node, :parents
|
6
6
|
|
7
7
|
def initialize(node, parents, wme, assignments = {})
|
8
8
|
@node = node
|
9
9
|
@parents = Set.new(Array(parents))
|
10
10
|
@wme = wme
|
11
11
|
@assignments = assignments
|
12
|
-
@deleted = false
|
13
|
-
@ncc_results = []
|
14
|
-
@generated_wmes = []
|
15
12
|
end
|
16
13
|
|
17
14
|
def ancestors
|
@@ -66,23 +63,6 @@ module Wongi::Engine
|
|
66
63
|
to_s
|
67
64
|
end
|
68
65
|
|
69
|
-
# def destroy
|
70
|
-
# deleted!
|
71
|
-
# end
|
72
|
-
|
73
|
-
def dispose!
|
74
|
-
# parent.children.delete(self) if parent
|
75
|
-
# @parent = nil
|
76
|
-
@wme = nil
|
77
|
-
end
|
78
|
-
|
79
|
-
# for neg feedback loop protection
|
80
|
-
# def generated?(wme)
|
81
|
-
# return true if generated_wmes.any? { |w| w == wme }
|
82
|
-
#
|
83
|
-
# children.any? { |t| t.generated? wme }
|
84
|
-
# end
|
85
|
-
|
86
66
|
protected
|
87
67
|
|
88
68
|
def all_assignments
|
@@ -91,17 +71,4 @@ module Wongi::Engine
|
|
91
71
|
end.merge(@assignments)
|
92
72
|
end
|
93
73
|
end
|
94
|
-
|
95
|
-
class FakeToken < Token
|
96
|
-
def initialize(token, wme, assignments) # rubocop:disable Lint/MissingSuper
|
97
|
-
@parent = token
|
98
|
-
@wme = wme
|
99
|
-
@assignments = assignments
|
100
|
-
# @children = []
|
101
|
-
@neg_join_results = []
|
102
|
-
@opt_join_results = []
|
103
|
-
@ncc_results = []
|
104
|
-
@generated_wmes = []
|
105
|
-
end
|
106
|
-
end
|
107
74
|
end
|
data/lib/wongi-engine/version.rb
CHANGED
data/lib/wongi-engine.rb
CHANGED
@@ -28,6 +28,8 @@ require 'wongi-engine/beta'
|
|
28
28
|
require 'wongi-engine/dsl'
|
29
29
|
require 'wongi-engine/ruleset'
|
30
30
|
require 'wongi-engine/compiler'
|
31
|
+
require 'wongi-engine/join_results'
|
32
|
+
require 'wongi-engine/generator_tracker'
|
31
33
|
require 'wongi-engine/overlay'
|
32
34
|
require 'wongi-engine/enumerators'
|
33
35
|
require 'wongi-engine/network'
|
data/spec/overlay_spec.rb
CHANGED
@@ -136,11 +136,6 @@ describe Wongi::Engine::Overlay do
|
|
136
136
|
|
137
137
|
overlay.retract(wme)
|
138
138
|
expect(overlay.find(wme)).to be_nil
|
139
|
-
expect(child1.find(wme)).to be_nil
|
140
|
-
expect(child2.find(wme)).to be_nil
|
141
|
-
|
142
|
-
child1.assert(wme)
|
143
|
-
expect(overlay.find(wme)).to be_nil
|
144
139
|
expect(child1.find(wme)).to eq(wme)
|
145
140
|
expect(child2.find(wme)).to eq(wme)
|
146
141
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wongi-engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.0.pre.
|
4
|
+
version: 0.4.0.pre.alpha10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Valeri Sokolov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
11
|
+
date: 2022-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -139,7 +139,9 @@ files:
|
|
139
139
|
- lib/wongi-engine/filter/inequality_test.rb
|
140
140
|
- lib/wongi-engine/filter/less_than_or_equal_test.rb
|
141
141
|
- lib/wongi-engine/filter/less_than_test.rb
|
142
|
+
- lib/wongi-engine/generator_tracker.rb
|
142
143
|
- lib/wongi-engine/graph.rb
|
144
|
+
- lib/wongi-engine/join_results.rb
|
143
145
|
- lib/wongi-engine/network.rb
|
144
146
|
- lib/wongi-engine/network/collectable.rb
|
145
147
|
- lib/wongi-engine/network/debug.rb
|