flor 0.16.1 → 0.16.2
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/CHANGELOG.md +8 -0
- data/CREDITS.md +1 -0
- data/Makefile +1 -1
- data/README.md +82 -6
- data/lib/flor.rb +1 -1
- data/lib/flor/conf.rb +19 -6
- data/lib/flor/core/executor.rb +45 -16
- data/lib/flor/core/node.rb +4 -4
- data/lib/flor/core/procedure.rb +40 -0
- data/lib/flor/djan.rb +5 -2
- data/lib/flor/flor.rb +92 -7
- data/lib/flor/id.rb +19 -0
- data/lib/flor/migrations/0001_tables.rb +6 -6
- data/lib/flor/migrations/0005_pointer_content.rb +20 -0
- data/lib/flor/pcore/_apply.rb +103 -57
- data/lib/flor/pcore/_att.rb +15 -1
- data/lib/flor/pcore/_ref.rb +2 -1
- data/lib/flor/pcore/arith.rb +46 -9
- data/lib/flor/pcore/break.rb +1 -1
- data/lib/flor/pcore/case.rb +41 -0
- data/lib/flor/pcore/collect.rb +1 -1
- data/lib/flor/pcore/cursor.rb +1 -1
- data/lib/flor/pcore/define.rb +32 -6
- data/lib/flor/pcore/iterator.rb +12 -0
- data/lib/flor/pcore/on_cancel.rb +1 -1
- data/lib/flor/pcore/set.rb +14 -4
- data/lib/flor/punit/{ccollect.rb → c_collect.rb} +2 -2
- data/lib/flor/punit/c_each.rb +11 -0
- data/lib/flor/punit/c_for_each.rb +41 -0
- data/lib/flor/punit/c_iterator.rb +160 -0
- data/lib/flor/punit/c_map.rb +43 -0
- data/lib/flor/punit/concurrence.rb +43 -200
- data/lib/flor/punit/graft.rb +3 -2
- data/lib/flor/punit/m_ram.rb +281 -0
- data/lib/flor/unit.rb +1 -0
- data/lib/flor/unit/caller.rb +6 -1
- data/lib/flor/unit/executor.rb +17 -4
- data/lib/flor/unit/ganger.rb +12 -1
- data/lib/flor/unit/hloader.rb +251 -0
- data/lib/flor/unit/hook.rb +74 -15
- data/lib/flor/unit/hooker.rb +9 -12
- data/lib/flor/unit/loader.rb +41 -17
- data/lib/flor/unit/models.rb +54 -18
- data/lib/flor/unit/models/execution.rb +15 -4
- data/lib/flor/unit/models/pointer.rb +11 -0
- data/lib/flor/unit/scheduler.rb +126 -30
- data/lib/flor/unit/spooler.rb +5 -3
- data/lib/flor/unit/storage.rb +40 -13
- data/lib/flor/unit/waiter.rb +165 -26
- data/lib/flor/unit/wlist.rb +98 -5
- metadata +10 -4
- data/lib/flor/punit/cmap.rb +0 -112
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.16.
|
4
|
+
version: 0.16.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: munemo
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- lib/flor/migrations/0002_cunit_and_munit.rb
|
163
163
|
- lib/flor/migrations/0003_timer_onid_bnid.rb
|
164
164
|
- lib/flor/migrations/0004_trap_bnid.rb
|
165
|
+
- lib/flor/migrations/0005_pointer_content.rb
|
165
166
|
- lib/flor/parser.rb
|
166
167
|
- lib/flor/pcore/_apply.rb
|
167
168
|
- lib/flor/pcore/_arr.rb
|
@@ -248,14 +249,18 @@ files:
|
|
248
249
|
- lib/flor/pcore/twig.rb
|
249
250
|
- lib/flor/pcore/type_of.rb
|
250
251
|
- lib/flor/pcore/until.rb
|
252
|
+
- lib/flor/punit/c_collect.rb
|
253
|
+
- lib/flor/punit/c_each.rb
|
254
|
+
- lib/flor/punit/c_for_each.rb
|
255
|
+
- lib/flor/punit/c_iterator.rb
|
256
|
+
- lib/flor/punit/c_map.rb
|
251
257
|
- lib/flor/punit/cancel.rb
|
252
|
-
- lib/flor/punit/ccollect.rb
|
253
|
-
- lib/flor/punit/cmap.rb
|
254
258
|
- lib/flor/punit/concurrence.rb
|
255
259
|
- lib/flor/punit/cron.rb
|
256
260
|
- lib/flor/punit/do_trap.rb
|
257
261
|
- lib/flor/punit/every.rb
|
258
262
|
- lib/flor/punit/graft.rb
|
263
|
+
- lib/flor/punit/m_ram.rb
|
259
264
|
- lib/flor/punit/on_timeout.rb
|
260
265
|
- lib/flor/punit/part.rb
|
261
266
|
- lib/flor/punit/schedule.rb
|
@@ -272,6 +277,7 @@ files:
|
|
272
277
|
- lib/flor/unit/caller.rb
|
273
278
|
- lib/flor/unit/executor.rb
|
274
279
|
- lib/flor/unit/ganger.rb
|
280
|
+
- lib/flor/unit/hloader.rb
|
275
281
|
- lib/flor/unit/hook.rb
|
276
282
|
- lib/flor/unit/hooker.rb
|
277
283
|
- lib/flor/unit/journal.rb
|
data/lib/flor/punit/cmap.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
|
2
|
-
class Flor::Pro::Cmap < Flor::Procedure
|
3
|
-
#
|
4
|
-
# Concurrent version of "map". Spins a concurrent child for each
|
5
|
-
# element of the incoming/argument collection.
|
6
|
-
#
|
7
|
-
# ```
|
8
|
-
# cmap [ 1 2 3 ]
|
9
|
-
# def x \ * x 2
|
10
|
-
# # yields: [ 2, 4, 6 ]
|
11
|
-
#
|
12
|
-
# [ 1 2 3 ]
|
13
|
-
# cmap (def x \ * x 2)
|
14
|
-
# # yields: [ 2, 4, 6 ]
|
15
|
-
#
|
16
|
-
# define double x \ * x 2
|
17
|
-
# cmap double [ 1 2 3 ]
|
18
|
-
# # yields: [ 2, 4, 6 ]
|
19
|
-
# ```
|
20
|
-
#
|
21
|
-
# "cmap" is over when all the children have answered. For more complex
|
22
|
-
# concurrent behaviours, look at [concurrence](concurrence.md).
|
23
|
-
#
|
24
|
-
# ## see also
|
25
|
-
#
|
26
|
-
# Map, concurrence.
|
27
|
-
|
28
|
-
name 'cmap'
|
29
|
-
|
30
|
-
def pre_execute
|
31
|
-
|
32
|
-
@node['args'] = []
|
33
|
-
@node['result'] = nil
|
34
|
-
|
35
|
-
unatt_unkeyed_children
|
36
|
-
end
|
37
|
-
|
38
|
-
def receive_non_att
|
39
|
-
|
40
|
-
if @node['result']
|
41
|
-
receive_ret
|
42
|
-
else
|
43
|
-
@node['args'] << payload['ret']
|
44
|
-
super
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def receive_last
|
49
|
-
|
50
|
-
if @node['result']
|
51
|
-
super
|
52
|
-
else
|
53
|
-
receive_last_argument
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
protected
|
58
|
-
|
59
|
-
def receive_last_argument
|
60
|
-
|
61
|
-
col = nil
|
62
|
-
fun = nil
|
63
|
-
@node['args'].each do |a|
|
64
|
-
if Flor.is_func_tree?(a)
|
65
|
-
fun = a
|
66
|
-
elsif Flor.is_collection?(a)
|
67
|
-
col = a
|
68
|
-
end
|
69
|
-
end
|
70
|
-
col ||= node_payload_ret
|
71
|
-
|
72
|
-
fail Flor::FlorError.new("collection not given to #{heap.inspect}", self) \
|
73
|
-
unless Flor.is_collection?(col)
|
74
|
-
return wrap('ret' => col) \
|
75
|
-
unless Flor.is_func_tree?(fun)
|
76
|
-
|
77
|
-
@node['cnt'] = col.size
|
78
|
-
@node['result'] = []
|
79
|
-
|
80
|
-
col
|
81
|
-
.collect
|
82
|
-
.with_index { |e, i|
|
83
|
-
apply(fun, determine_iteration_args(col, i), tree[2]) }
|
84
|
-
.flatten(1)
|
85
|
-
end
|
86
|
-
|
87
|
-
def determine_iteration_args(col, idx)
|
88
|
-
|
89
|
-
args =
|
90
|
-
if col.is_a?(Array)
|
91
|
-
[ [ 'elt', col[idx] ] ]
|
92
|
-
else
|
93
|
-
e = col.to_a[idx]
|
94
|
-
[ [ 'key', e[0] ], [ 'val', e[1] ] ]
|
95
|
-
end
|
96
|
-
args << [ 'idx', idx ]
|
97
|
-
args << [ 'len', col.length ]
|
98
|
-
|
99
|
-
args
|
100
|
-
end
|
101
|
-
|
102
|
-
def receive_ret
|
103
|
-
|
104
|
-
@node['result'] << [ from_sub_nid, payload['ret'] ]
|
105
|
-
@node['cnt'] = @node['cnt'] - 1
|
106
|
-
|
107
|
-
return [] if @node['cnt'] > 0 # still waiting for answers
|
108
|
-
|
109
|
-
wrap('ret' => @node['result'].sort_by(&:first).collect(&:last)) # over
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|