pione 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -3
- data/.simplecov +7 -0
- data/.travis.yml +8 -0
- data/Gemfile +3 -0
- data/History.txt +13 -0
- data/README.md +2 -0
- data/Rakefile +16 -6
- data/bin/pione-val +5 -0
- data/example/AbstractRule/package.yml +1 -0
- data/example/HelloWorld/package.yml +2 -0
- data/example/HelloWorld/scenario/scenario.yml +2 -0
- data/example/LoopByTouch/LoopByTouch.pione +28 -0
- data/example/LoopByTouch/package.yml +1 -0
- data/example/MakePair/package.yml +2 -0
- data/example/MakePair/{data → scenario/input}/1.i +0 -0
- data/example/MakePair/{data → scenario/input}/2.i +0 -0
- data/example/MakePair/{data → scenario/input}/3.i +0 -0
- data/example/MakePair/{data → scenario/input}/4.i +0 -0
- data/example/MakePair/{data → scenario/input}/5.i +0 -0
- data/example/MakePair/scenario/scenario.yml +1 -0
- data/example/ScoreAggregation/ScoreAggregation.pione +122 -0
- data/example/ScoreAggregation/bin/apply-template.rb +10 -0
- data/example/ScoreAggregation/bin/histgram-graph.sh +18 -0
- data/example/ScoreAggregation/bin/mean-summary.rb +10 -0
- data/example/ScoreAggregation/bin/personal-bar-graph.sh +18 -0
- data/example/ScoreAggregation/bin/personal-pre-statistics.rb +37 -0
- data/example/ScoreAggregation/bin/total-mean.rb +10 -0
- data/example/ScoreAggregation/bin/total-statistics.rb +43 -0
- data/example/ScoreAggregation/generate-data.rb +63 -0
- data/example/ScoreAggregation/package.yml +1 -0
- data/example/ScoreAggregation/scenario/case1/input/A.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/B.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/C.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/D.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/E.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/F.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/G.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/H.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/I.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/J.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/K.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/L.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/M.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/N.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/O.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/P.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/Q.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/R.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/S.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/T.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/U.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/V.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/W.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/X.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/Y.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/Z.score +15 -0
- data/example/ScoreAggregation/scenario/case1/input/stat-template.erb +24 -0
- data/example/ScoreAggregation/scenario/case1/scenario.yml +3 -0
- data/example/{SequentialProcess/SequentialProcess.pione → SerialProcessing/SerialProcessing.pione} +0 -0
- data/example/SerialProcessing/package.yml +1 -0
- data/example/WorkflowPatterns/01_Sequence/Sequence.pione +21 -0
- data/example/WorkflowPatterns/02_PrallelSplit/ParallelSplit.pione +29 -0
- data/example/WorkflowPatterns/03_Synchronization/Synchronization.pione +30 -0
- data/example/WorkflowPatterns/04_ExclusiveChoice/ExclusiveChoice.pione +44 -0
- data/example/WorkflowPatterns/05_SimpleMerge/SimpleMerge.pione +44 -0
- data/example/WorkflowPatterns/06_MultiChoice/MultiChoice.pione +48 -0
- data/example/WorkflowPatterns/07_StructuredSynchronizingMerge/StructuredSynchronizingMerge.pione +71 -0
- data/example/WorkflowPatterns/08_MultiMerge/MultiMerge.pione +44 -0
- data/example/WorkflowPatterns/11_ImplicitTermination/ImplicitTermination.pione +29 -0
- data/example/WorkflowPatterns/12_MultipleInstancesWithoutSynchronization/MultipleInstancesWithoutSynchronization.pione +29 -0
- data/example/WorkflowPatterns/13_MultipleInstancesWithDesignTimeKnowledge/MultipleInstancesWithDesignTimeKnowledge.pione +28 -0
- data/example/WorkflowPatterns/14_MultipleInstancesWithRunTimeKnowledge/MultipleInstancesWithRunTimeKnowledge.pione +33 -0
- data/example/WorkflowPatterns/33_GeneralizedANDJoin/GeneralizedANDJoin.pione +21 -0
- data/example/WorkflowPatterns/37_LocalSynchronizingMerge/LocalSynchronizingMerge.pione +101 -0
- data/example/WorkflowPatterns/41_ThreadMerge/ThreadMerge.pione +43 -0
- data/example/WorkflowPatterns/42_ThreadSplit/ThreadSplit.pione +16 -0
- data/lib/pione.rb +23 -47
- data/lib/pione/agent/broker.rb +1 -1
- data/lib/pione/agent/input-generator.rb +1 -1
- data/lib/pione/agent/logger.rb +62 -49
- data/lib/pione/agent/messenger.rb +38 -0
- data/lib/pione/agent/rule-provider.rb +3 -3
- data/lib/pione/agent/task-worker.rb +14 -2
- data/lib/pione/agent/tuple-space-client.rb +1 -1
- data/lib/pione/agent/tuple-space-server-client-life-checker.rb +5 -3
- data/lib/pione/command.rb +2 -0
- data/lib/pione/command/basic-command.rb +1 -1
- data/lib/pione/command/pione-client.rb +57 -16
- data/lib/pione/command/pione-log.rb +5 -5
- data/lib/pione/command/pione-syntax-checker.rb +22 -7
- data/lib/pione/command/pione-task-worker.rb +36 -19
- data/lib/pione/command/pione-tuple-space-viewer.rb +3 -3
- data/lib/pione/command/pione-val.rb +40 -0
- data/lib/pione/component.rb +8 -0
- data/lib/pione/{system → component}/document.rb +13 -11
- data/lib/pione/component/package.rb +269 -0
- data/lib/pione/component/rule.rb +206 -0
- data/lib/pione/location/basic-location.rb +49 -7
- data/lib/pione/location/ftp-location.rb +19 -6
- data/lib/pione/location/local-location.rb +15 -6
- data/lib/pione/log.rb +4 -1
- data/lib/pione/log/{domain-info.rb → domain-log.rb} +23 -11
- data/lib/pione/{util/console-message.rb → log/message-log.rb} +16 -15
- data/lib/pione/log/process-log.rb +35 -86
- data/lib/pione/log/process-record.rb +24 -11
- data/lib/pione/log/system-log.rb +107 -0
- data/lib/pione/log/xes-log.rb +54 -48
- data/lib/pione/model.rb +1 -3
- data/lib/pione/model/assignment.rb +1 -0
- data/lib/pione/model/basic-model.rb +31 -15
- data/lib/pione/model/block.rb +1 -1
- data/lib/pione/model/boolean.rb +10 -23
- data/lib/pione/model/constraints.rb +12 -0
- data/lib/pione/model/data-expr.rb +31 -36
- data/lib/pione/model/feature-expr.rb +6 -23
- data/lib/pione/model/float.rb +29 -18
- data/lib/pione/model/integer.rb +44 -56
- data/lib/pione/model/keyed-sequence.rb +11 -4
- data/lib/pione/model/message.rb +4 -4
- data/lib/pione/model/ordinal-sequence.rb +12 -14
- data/lib/pione/model/package-expr.rb +53 -0
- data/lib/pione/model/parameters.rb +12 -11
- data/lib/pione/model/pione-method.rb +2 -2
- data/lib/pione/model/rule-expr.rb +30 -52
- data/lib/pione/model/sequence.rb +26 -26
- data/lib/pione/model/string.rb +13 -54
- data/lib/pione/model/ticket-expr.rb +12 -53
- data/lib/pione/model/type.rb +7 -1
- data/lib/pione/model/variable-table.rb +5 -4
- data/lib/pione/model/variable.rb +0 -5
- data/lib/pione/option/common-option.rb +2 -1
- data/lib/pione/option/task-worker-owner-option.rb +1 -1
- data/lib/pione/patch/drb-patch.rb +1 -1
- data/lib/pione/patch/em-ftpd-patch.rb +7 -0
- data/lib/pione/patch/rinda-patch.rb +53 -0
- data/lib/pione/patch/uri-patch.rb +5 -0
- data/lib/pione/relay/relay-socket.rb +2 -2
- data/lib/pione/rule-handler/action-handler.rb +71 -64
- data/lib/pione/rule-handler/basic-handler.rb +50 -32
- data/lib/pione/rule-handler/flow-handler.rb +51 -34
- data/lib/pione/rule-handler/update-criteria.rb +43 -20
- data/lib/pione/system.rb +13 -0
- data/lib/pione/system/domain-info.rb +34 -0
- data/lib/pione/system/global.rb +8 -1
- data/lib/pione/system/object.rb +1 -1
- data/lib/pione/transformer/expr-transformer.rb +3 -3
- data/lib/pione/transformer/literal-transformer.rb +3 -3
- data/lib/pione/transformer/rule-definition-transformer.rb +11 -9
- data/lib/pione/tuple-space/tuple-space-server-interface.rb +19 -1
- data/lib/pione/tuple-space/tuple-space-server.rb +9 -2
- data/lib/pione/tuple.rb +30 -0
- data/lib/pione/tuple/data-null-tuple.rb +14 -0
- data/lib/pione/tuple/message-tuple.rb +7 -0
- data/lib/pione/tuple/process-log-tuple.rb +13 -0
- data/lib/pione/tuple/touch-tuple.rb +14 -0
- data/lib/pione/uri-scheme/myftp-scheme.rb +45 -0
- data/lib/pione/util.rb +18 -0
- data/lib/pione/util/cpu.rb +20 -0
- data/lib/pione/util/error-report.rb +9 -1
- data/lib/pione/util/evaluatable.rb +47 -0
- data/lib/pione/util/ftp-server.rb +468 -0
- data/lib/pione/util/id.rb +39 -0
- data/lib/pione/util/indentation.rb +19 -0
- data/lib/pione/util/ip-address.rb +35 -0
- data/lib/pione/util/misc.rb +0 -47
- data/lib/pione/util/uuid.rb +28 -0
- data/lib/pione/util/variable-holdable.rb +38 -0
- data/lib/pione/version.rb +1 -1
- data/pione.gemspec +16 -14
- data/test/agent/spec_logger.rb +35 -44
- data/test/agent/spec_messenger.rb +25 -0
- data/test/agent/spec_rule-provider.rb +1 -1
- data/test/agent/spec_task-worker.rb +7 -13
- data/test/{system → component}/spec_document.rb +20 -20
- data/test/component/spec_package.rb +77 -0
- data/test/component/spec_package/TestPackage/Test.pione +14 -0
- data/test/component/spec_package/TestPackage/bin/count +3 -0
- data/test/component/spec_package/TestPackage/package.yml +7 -0
- data/test/component/spec_package/TestPackage/scenario/case1/input/1.txt +1 -0
- data/test/component/spec_package/TestPackage/scenario/case1/scenario.yml +1 -0
- data/test/component/spec_rule.rb +140 -0
- data/test/endurance-test/graph.plt +12 -0
- data/test/endurance-test/run.sh +65 -0
- data/test/location/location-behavior.rb +125 -0
- data/test/location/spec_ftp-location.rb +28 -90
- data/test/location/spec_local-location.rb +26 -76
- data/test/log/raw-process-log/pione-process.log +710 -0
- data/test/log/spec_domain-log.rb +57 -0
- data/test/log/spec_message-log.rb +44 -0
- data/test/log/spec_process-log.rb +88 -0
- data/test/log/spec_process-record.rb +148 -0
- data/test/log/spec_system-log.rb +142 -0
- data/test/log/spec_xes-log.rb +2 -2
- data/test/model/spec_assignment.rb +26 -25
- data/test/model/spec_block.rb +51 -97
- data/test/model/spec_boolean.rb +0 -5
- data/test/model/spec_call-rule.rb +6 -6
- data/test/model/spec_data-expr.rb +0 -7
- data/test/model/spec_data-expr.yml +8 -0
- data/test/model/spec_float.rb +1 -1
- data/test/model/spec_float.yml +13 -0
- data/test/model/spec_integer.rb +1 -1
- data/test/model/spec_integer.yml +12 -1
- data/test/model/spec_keyed-sequence.yml +5 -0
- data/test/model/spec_message.rb +2 -4
- data/test/model/spec_package-expr.rb +19 -0
- data/test/model/spec_parameters.rb +56 -88
- data/test/model/spec_pione-method.rb +15 -14
- data/test/model/spec_rule-expr.rb +4 -52
- data/test/model/spec_rule-expr.yml +11 -0
- data/test/model/spec_sequence.yml +6 -0
- data/test/model/spec_string.rb +21 -13
- data/test/model/spec_string.yml +10 -2
- data/test/model/spec_ticket-expr.rb +25 -3
- data/test/model/spec_variable.rb +8 -8
- data/test/rule-handler/spec_action-handler.pione +37 -0
- data/test/rule-handler/spec_action-handler.rb +41 -97
- data/test/rule-handler/spec_flow-handler.rb +24 -30
- data/test/rule-handler/spec_update-criteria.pione +16 -0
- data/test/rule-handler/spec_update-criteria.rb +7 -4
- data/test/rule-handler/spec_update-criteria.yml +191 -0
- data/test/system/spec_domain-info.rb +25 -0
- data/test/test-util.rb +38 -228
- data/test/transformer/spec_block-transformer.rb +1 -1
- data/test/transformer/spec_expr-transformer.rb +30 -39
- data/test/transformer/spec_flow-element-transformer.rb +17 -17
- data/test/transformer/spec_literal-transformer.rb +3 -3
- data/test/transformer/spec_rule-definition-transformer.rb +55 -76
- data/test/{spec_data-finder.rb → tuple-space/spec_data-finder.rb} +1 -1
- data/test/{spec_data-finder.yml → tuple-space/spec_data-finder.yml} +0 -0
- data/test/tuple/spec_data-tuple.rb +5 -76
- data/test/tuple/spec_finished-tuple.rb +5 -46
- data/test/tuple/spec_message-tuple.rb +10 -0
- data/test/tuple/spec_task-tuple.rb +4 -110
- data/test/tuple/spec_touch-tuple.rb +14 -0
- data/test/tuple/tuple-behavior.rb +14 -0
- data/test/uri-scheme/spec_local-scheme.rb +1 -1
- data/test/uri-scheme/spec_myftp-scheme.rb +73 -0
- data/test/uri-scheme/spec_myftp-scheme.yml +85 -0
- data/test/util/spec_cpu.rb +8 -0
- data/test/util/spec_error-report.rb +42 -0
- data/test/util/spec_evaluatable.rb +18 -0
- data/test/util/spec_ftp-server.rb +249 -0
- data/test/util/spec_id.pione +14 -0
- data/test/util/spec_id.rb +77 -0
- data/test/util/spec_indentation.rb +77 -0
- data/test/util/spec_ip-address.rb +15 -0
- data/test/util/spec_uuid.rb +11 -0
- data/test/util/spec_variable-holdable.rb +69 -0
- metadata +282 -83
- data/bin/pione-eval +0 -111
- data/demo/demo.rb +0 -311
- data/demo/public/base.css +0 -94
- data/demo/public/demo.js +0 -107
- data/demo/public/index.html +0 -91
- data/demo/public/jquery-1.8.3.min.js +0 -2
- data/lib/pione/model/binary-operator.rb +0 -90
- data/lib/pione/model/list.rb +0 -108
- data/lib/pione/model/package.rb +0 -56
- data/lib/pione/model/rule-io.rb +0 -178
- data/lib/pione/model/rule.rb +0 -295
- data/lib/pione/system/identifier.rb +0 -61
- data/lib/pione/tuple/log-tuple.rb +0 -14
- data/lib/pione/util/terminal.rb +0 -78
- data/test/log/data/sample.log +0 -1003
- data/test/model/spec_binary-operator.rb +0 -39
- data/test/model/spec_package.rb +0 -15
- data/test/model/spec_rule.rb +0 -158
- data/test/spec_identifier.rb +0 -29
- data/test/spec_log.rb +0 -52
data/lib/pione/model/integer.rb
CHANGED
@@ -2,48 +2,14 @@ module Pione
|
|
2
2
|
module Model
|
3
3
|
# PioneInteger represents integer value in PIONE system.
|
4
4
|
class PioneInteger < Value
|
5
|
-
# @api private
|
6
|
-
def task_id_string
|
7
|
-
"Integer<#{@value}>"
|
8
|
-
end
|
9
|
-
|
10
5
|
# @api private
|
11
6
|
def textize
|
12
7
|
@value.to_s
|
13
8
|
end
|
14
9
|
|
15
|
-
# Return the ruby's value.
|
16
|
-
#
|
17
|
-
# @return [Integer]
|
18
|
-
# ruby's value
|
19
|
-
def to_ruby
|
20
|
-
return @value
|
21
|
-
end
|
22
|
-
|
23
10
|
def to_seq
|
24
11
|
IntegerSequence.new([self])
|
25
12
|
end
|
26
|
-
|
27
|
-
# @api private
|
28
|
-
def ==(other)
|
29
|
-
return false unless other.kind_of?(self.class)
|
30
|
-
@value == other.value
|
31
|
-
end
|
32
|
-
|
33
|
-
alias :eql? :"=="
|
34
|
-
|
35
|
-
# @api private
|
36
|
-
def hash
|
37
|
-
@value.hash
|
38
|
-
end
|
39
|
-
|
40
|
-
# @api private
|
41
|
-
def inspect
|
42
|
-
"#<PioneInteger %s>" % @value
|
43
|
-
end
|
44
|
-
|
45
|
-
# @api private
|
46
|
-
alias :to_s :inspect
|
47
13
|
end
|
48
14
|
|
49
15
|
class IntegerSequence < OrdinalSequence
|
@@ -53,95 +19,95 @@ module Pione
|
|
53
19
|
end
|
54
20
|
|
55
21
|
TypeInteger.instance_eval do
|
56
|
-
define_pione_method(">", [TypeInteger], TypeBoolean) do |rec, other|
|
22
|
+
define_pione_method(">", [TypeInteger], TypeBoolean) do |vtable, rec, other|
|
57
23
|
sequential_map2(TypeBoolean, rec, other) do |rec_elt, other_elt|
|
58
24
|
rec_elt.value > other_elt.value
|
59
25
|
end
|
60
26
|
end
|
61
27
|
|
62
|
-
define_pione_method(">=", [TypeInteger], TypeBoolean) do |rec, other|
|
28
|
+
define_pione_method(">=", [TypeInteger], TypeBoolean) do |vtable, rec, other|
|
63
29
|
BooleanSequence.new(
|
64
|
-
[PioneBoolean.new(rec.call_pione_method(">", other).value || rec.call_pione_method("==", other).value)]
|
30
|
+
[PioneBoolean.new(rec.call_pione_method(vtable, ">", other).value || rec.call_pione_method(vtable, "==", other).value)]
|
65
31
|
)
|
66
32
|
end
|
67
33
|
|
68
|
-
define_pione_method("<", [TypeInteger], TypeBoolean) do |rec, other|
|
34
|
+
define_pione_method("<", [TypeInteger], TypeBoolean) do |vtable, rec, other|
|
69
35
|
sequential_map2(TypeBoolean, rec, other) do |rec_elt, other_elt|
|
70
36
|
rec_elt.value < other_elt.value
|
71
37
|
end
|
72
38
|
end
|
73
39
|
|
74
|
-
define_pione_method("<=", [TypeInteger], TypeBoolean) do |rec, other|
|
40
|
+
define_pione_method("<=", [TypeInteger], TypeBoolean) do |vtable, rec, other|
|
75
41
|
BooleanSequence.new(
|
76
42
|
[PioneBoolean.new(
|
77
|
-
rec.call_pione_method("<", other).value ||
|
78
|
-
rec.call_pione_method("==", other).value
|
43
|
+
rec.call_pione_method(vtable, "<", other).value ||
|
44
|
+
rec.call_pione_method(vtable, "==", other).value
|
79
45
|
)]
|
80
46
|
)
|
81
47
|
end
|
82
48
|
|
83
|
-
define_pione_method("+", [TypeInteger], TypeInteger) do |rec, other|
|
49
|
+
define_pione_method("+", [TypeInteger], TypeInteger) do |vtable, rec, other|
|
84
50
|
sequential_map2(TypeInteger, rec, other) do |rec_elt, other_elt|
|
85
51
|
rec_elt.value + other_elt.value
|
86
52
|
end
|
87
53
|
end
|
88
54
|
|
89
|
-
define_pione_method("-", [TypeInteger], TypeInteger) do |rec, other|
|
55
|
+
define_pione_method("-", [TypeInteger], TypeInteger) do |vtable, rec, other|
|
90
56
|
sequential_map2(TypeInteger, rec, other) do |rec_elt, other_elt|
|
91
57
|
rec_elt.value - other_elt.value
|
92
58
|
end
|
93
59
|
end
|
94
60
|
|
95
|
-
define_pione_method("*", [TypeInteger], TypeInteger) do |rec, other|
|
61
|
+
define_pione_method("*", [TypeInteger], TypeInteger) do |vtable, rec, other|
|
96
62
|
sequential_map2(TypeInteger, rec, other) do |rec_elt, other_elt|
|
97
63
|
rec_elt.value * other_elt.value
|
98
64
|
end
|
99
65
|
end
|
100
66
|
|
101
|
-
define_pione_method("%", [TypeInteger], TypeInteger) do |rec, other|
|
67
|
+
define_pione_method("%", [TypeInteger], TypeInteger) do |vtable, rec, other|
|
102
68
|
# TODO: zero division error
|
103
69
|
sequential_map2(TypeInteger, rec, other) do |rec_elt, other_elt|
|
104
70
|
rec_elt.value % other_elt.value
|
105
71
|
end
|
106
72
|
end
|
107
73
|
|
108
|
-
define_pione_method("/", [TypeInteger], TypeInteger) do |rec, other|
|
74
|
+
define_pione_method("/", [TypeInteger], TypeInteger) do |vtable, rec, other|
|
109
75
|
# TODO: zero division error
|
110
76
|
sequential_map2(TypeInteger, rec, other) do |rec_elt, other_elt|
|
111
77
|
rec_elt.value / other_elt.value
|
112
78
|
end
|
113
79
|
end
|
114
80
|
|
115
|
-
define_pione_method("as_string", [], TypeString) do |rec|
|
81
|
+
define_pione_method("as_string", [], TypeString) do |vtable, rec|
|
116
82
|
sequential_map1(TypeString, rec) {|elt| elt.value.to_s}
|
117
83
|
end
|
118
84
|
|
119
|
-
define_pione_method("as_integer", [], TypeInteger) do |rec|
|
85
|
+
define_pione_method("as_integer", [], TypeInteger) do |vtable, rec|
|
120
86
|
rec
|
121
87
|
end
|
122
88
|
|
123
|
-
define_pione_method("as_float", [], TypeFloat) do |rec|
|
89
|
+
define_pione_method("as_float", [], TypeFloat) do |vtable, rec|
|
124
90
|
sequential_map1(TypeFloat, rec) {|elt| elt.value.to_f}
|
125
91
|
end
|
126
92
|
|
127
|
-
define_pione_method("next", [], TypeInteger) do |rec|
|
93
|
+
define_pione_method("next", [], TypeInteger) do |vtable, rec|
|
128
94
|
sequential_map1(TypeInteger, rec) {|elt| elt.value.next}
|
129
95
|
end
|
130
96
|
|
131
|
-
define_pione_method("prev", [], TypeInteger) do |rec|
|
97
|
+
define_pione_method("prev", [], TypeInteger) do |vtable, rec|
|
132
98
|
sequential_map1(TypeInteger, rec) {|elt| elt.value.pred}
|
133
99
|
end
|
134
100
|
|
135
|
-
define_pione_method("even?", [], TypeBoolean) do |rec|
|
101
|
+
define_pione_method("even?", [], TypeBoolean) do |vtable, rec|
|
136
102
|
sequential_pred1(rec) {|elt| elt.value.even?}
|
137
103
|
end
|
138
104
|
|
139
|
-
define_pione_method("odd?", [], TypeBoolean) do |rec|
|
105
|
+
define_pione_method("odd?", [], TypeBoolean) do |vtable, rec|
|
140
106
|
sequential_pred1(rec) {|elt| elt.value.odd?}
|
141
107
|
end
|
142
108
|
|
143
109
|
# upto : *integer -> *integer
|
144
|
-
define_pione_method("upto", [TypeInteger], TypeInteger) do |rec, max|
|
110
|
+
define_pione_method("upto", [TypeInteger], TypeInteger) do |vtable, rec, max|
|
145
111
|
sequential_fold2(TypeInteger, rec, max) do |seq, rec_elt, max_elt|
|
146
112
|
if rec_elt.value < max_elt.value
|
147
113
|
rec_elt.value.upto(max_elt.value).inject(seq) do |_seq, i|
|
@@ -153,8 +119,8 @@ module Pione
|
|
153
119
|
end
|
154
120
|
end
|
155
121
|
|
156
|
-
# downto :
|
157
|
-
define_pione_method("downto", [TypeInteger], TypeInteger) do |rec, min|
|
122
|
+
# downto : integer -> integer
|
123
|
+
define_pione_method("downto", [TypeInteger], TypeInteger) do |vtable, rec, min|
|
158
124
|
sequential_fold2(TypeInteger, rec, min) do |seq, rec_elt, min_elt|
|
159
125
|
if rec_elt.value > min_elt.value
|
160
126
|
rec_elt.value.downto(min_elt.value).inject(seq) do |_seq, i|
|
@@ -165,6 +131,28 @@ module Pione
|
|
165
131
|
end
|
166
132
|
end
|
167
133
|
end
|
134
|
+
|
135
|
+
# max : integer
|
136
|
+
define_pione_method("max", [], TypeInteger) do |vtable, rec|
|
137
|
+
fold1(IntegerSequence.empty, rec) do |seq, elt|
|
138
|
+
if seq.elements.size == 0 or seq.elements.first.value < elt.value
|
139
|
+
elt.to_seq
|
140
|
+
else
|
141
|
+
seq
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# min : integer
|
147
|
+
define_pione_method("min", [], TypeInteger) do |vtable, rec|
|
148
|
+
fold1(IntegerSequence.empty, rec) do |seq, elt|
|
149
|
+
if seq.elements.size == 0 or seq.elements.first.value > elt.value
|
150
|
+
elt.to_seq
|
151
|
+
else
|
152
|
+
seq
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
168
156
|
end
|
169
157
|
end
|
170
158
|
end
|
@@ -51,7 +51,7 @@ module Pione
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
# Concatenate another
|
54
|
+
# Concatenate the sequence and another one.
|
55
55
|
#
|
56
56
|
# @param other [Sequence]
|
57
57
|
# other sequence
|
@@ -123,21 +123,28 @@ module Pione
|
|
123
123
|
end
|
124
124
|
|
125
125
|
TypeKeyedSequence.instance_eval do
|
126
|
-
|
126
|
+
# keys : index_type
|
127
|
+
define_pione_method("keys", [], :index_type) do |vtable, rec|
|
127
128
|
keys = rec.elements.keys
|
128
129
|
rec.ordinal_sequence_of_element(keys.first).new(keys)
|
129
130
|
end
|
130
131
|
|
131
|
-
|
132
|
+
# values : element_type
|
133
|
+
define_pione_method("values", [], :element_type) do |vtable, rec|
|
132
134
|
vals = rec.elements.values.flatten
|
133
135
|
rec.ordinal_sequence_of_element(vals.first).new(vals)
|
134
136
|
end
|
135
137
|
|
136
|
-
|
138
|
+
# [] : index_type -> element_type
|
139
|
+
define_pione_method("[]", [:index_type], :element_type) do |vtable, rec, index|
|
137
140
|
index.elements.map do |index_elt|
|
138
141
|
rec.elements[index_elt]
|
139
142
|
end.flatten.tap{|x| break rec.ordinal_sequence_of_element(x.first).new(x, rec.attribute)}
|
140
143
|
end
|
144
|
+
|
145
|
+
define_pione_method("textize", [], TypeString) do |vtable, rec|
|
146
|
+
rec.call_pione_method(vtable, "values").call_pione_method(vtable, "textize")
|
147
|
+
end
|
141
148
|
end
|
142
149
|
end
|
143
150
|
end
|
data/lib/pione/model/message.rb
CHANGED
@@ -21,8 +21,8 @@ module Pione
|
|
21
21
|
# message arguments
|
22
22
|
def initialize(name, receiver, *arguments)
|
23
23
|
@name = name
|
24
|
-
@receiver = receiver
|
25
|
-
@arguments = arguments
|
24
|
+
@receiver = receiver
|
25
|
+
@arguments = arguments
|
26
26
|
super()
|
27
27
|
end
|
28
28
|
|
@@ -42,7 +42,7 @@ module Pione
|
|
42
42
|
if pione_method = @receiver.pione_model_type.find_method(@name, @receiver, *@arguments)
|
43
43
|
pione_method.get_output_type(@receiver)
|
44
44
|
else
|
45
|
-
raise MethodNotFound.new(@name.to_s,
|
45
|
+
raise MethodNotFound.new(@name.to_s, @receiver, *@arguments)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -55,7 +55,7 @@ module Pione
|
|
55
55
|
def eval(vtable)
|
56
56
|
receiver = @receiver.eval(vtable)
|
57
57
|
arguments = @arguments.map{|arg| arg.eval(vtable)}
|
58
|
-
receiver.call_pione_method(@name, *arguments)
|
58
|
+
receiver.call_pione_method(vtable, @name, *arguments)
|
59
59
|
end
|
60
60
|
|
61
61
|
# Return true if the receiver or arguments include variables.
|
@@ -14,49 +14,47 @@ module Pione
|
|
14
14
|
end
|
15
15
|
|
16
16
|
TypeOrdinalSequence.instance_eval do
|
17
|
-
define_pione_method("==", [:receiver_type], TypeBoolean) do |rec, other|
|
17
|
+
define_pione_method("==", [:receiver_type], TypeBoolean) do |vtable, rec, other|
|
18
18
|
if rec.elements.size == other.elements.size
|
19
19
|
rec.elements.size.times.all? do |i|
|
20
|
-
rec.elements[i]
|
20
|
+
rec.elements[i] == other.elements[i]
|
21
21
|
end.tap {|x| break BooleanSequence.new([PioneBoolean.new(x)])}
|
22
22
|
else
|
23
23
|
BooleanSequence.new([PioneBoolean.new(false)])
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
define_pione_method("nth", [TypeInteger], :receiver_type) do |rec, index|
|
28
|
-
map1(index)
|
29
|
-
elt.value == 0 ? rec : rec.elements[elt.value-1]
|
30
|
-
end
|
27
|
+
define_pione_method("nth", [TypeInteger], :receiver_type) do |vtable, rec, index|
|
28
|
+
map1(index) {|elt| elt.value == 0 ? rec : rec.elements[elt.value-1]}
|
31
29
|
end
|
32
30
|
|
33
|
-
define_pione_method("[]", [:index_type], :receiver_type) do |rec, index|
|
34
|
-
rec.call_pione_method("nth", index)
|
31
|
+
define_pione_method("[]", [:index_type], :receiver_type) do |vtable, rec, index|
|
32
|
+
rec.call_pione_method(vtable, "nth", index)
|
35
33
|
end
|
36
34
|
|
37
|
-
define_pione_method("reverse", [], :receiver_type) do |rec|
|
35
|
+
define_pione_method("reverse", [], :receiver_type) do |vtable, rec|
|
38
36
|
rec.class.new(rec.elements.reverse, rec.attribute)
|
39
37
|
end
|
40
38
|
|
41
|
-
define_pione_method("head", [], :receiver_type) do |rec|
|
39
|
+
define_pione_method("head", [], :receiver_type) do |vtable, rec|
|
42
40
|
rec.class.new([rec.elements[0]], rec.attribute)
|
43
41
|
end
|
44
42
|
|
45
|
-
define_pione_method("tail", [], :receiver_type) do |rec|
|
43
|
+
define_pione_method("tail", [], :receiver_type) do |vtable, rec|
|
46
44
|
# NOTE: #tail should fail when the sequence length is less than 1
|
47
45
|
rec.class.new(rec.elements[1..-1], rec.attribute)
|
48
46
|
end
|
49
47
|
|
50
|
-
define_pione_method("last", [], :receiver_type) do |rec|
|
48
|
+
define_pione_method("last", [], :receiver_type) do |vtable, rec|
|
51
49
|
rec.class.new([rec.elements[-1]], rec.attribute)
|
52
50
|
end
|
53
51
|
|
54
|
-
define_pione_method("init", [], :receiver_type) do |rec|
|
52
|
+
define_pione_method("init", [], :receiver_type) do |vtable, rec|
|
55
53
|
# NOTE: #init should fail when the sequence length is less than 1
|
56
54
|
rec.class.new(rec.elements[0..-2], rec.attribute)
|
57
55
|
end
|
58
56
|
|
59
|
-
define_pione_method("type", [], TypeString) do |rec|
|
57
|
+
define_pione_method("type", [], TypeString) do |vtable, rec|
|
60
58
|
case rec
|
61
59
|
when StringSequence
|
62
60
|
"string"
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Pione
|
2
|
+
module Model
|
3
|
+
# PackageExpr is an expression of PIONE package.
|
4
|
+
class PackageExpr < Element
|
5
|
+
attr_reader :name
|
6
|
+
|
7
|
+
# Create a package with name.
|
8
|
+
#
|
9
|
+
# @param name [String]
|
10
|
+
# package name
|
11
|
+
def initialize(name)
|
12
|
+
@name = name
|
13
|
+
super()
|
14
|
+
end
|
15
|
+
|
16
|
+
# @api private
|
17
|
+
def textize
|
18
|
+
"package-expr(\"%s\")" % [@name]
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return a rule path.
|
22
|
+
#
|
23
|
+
# @param other [RuleExpr]
|
24
|
+
# rule expression
|
25
|
+
# @return [String]
|
26
|
+
# rule path string
|
27
|
+
def +(other)
|
28
|
+
raise ArgumentError.new(other) unless other.kind_of?(RuleExpr)
|
29
|
+
"#{@name}:#{other.name}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class PackageExprSequence < Sequence
|
34
|
+
set_pione_model_type TypePackageExpr
|
35
|
+
set_element_class PackageExpr
|
36
|
+
end
|
37
|
+
|
38
|
+
TypePackageExpr.instance_eval do
|
39
|
+
define_pione_method("bin", [], TypeString) do |vtable, rec|
|
40
|
+
base = Location[vtable.get(Variable.new("__BASE__")).value]
|
41
|
+
bin = base + "package" + rec.elements.first.name + "bin"
|
42
|
+
working_directory = Location[vtable.get(Variable.new("__WORKING_DIRECTORY__")).first.value]
|
43
|
+
bin.entries.each do |entry|
|
44
|
+
path = working_directory + "bin" + entry.basename
|
45
|
+
unless path.exist?
|
46
|
+
entry.copy(working_directory + "bin" + entry.basename)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
PioneString.new((working_directory + "bin").path).to_seq
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -99,7 +99,8 @@ module Pione
|
|
99
99
|
|
100
100
|
# @api private
|
101
101
|
def textize
|
102
|
-
"{" + @data.map{|k,v| "%s:%s" % [k.textize[1..-1], v.textize]}.join(", ") + "}"
|
102
|
+
# "{" + @data.map{|k,v| "%s:%s" % [k.textize[1..-1], v.textize]}.join(", ") + "}"
|
103
|
+
"{" + @data.map.sort.map{|k,v| "%s:%s" % [k.textize[1..-1], v.textize]}.join(", ") + "}"
|
103
104
|
end
|
104
105
|
|
105
106
|
# Return value of parameter name.
|
@@ -323,19 +324,19 @@ module Pione
|
|
323
324
|
# end
|
324
325
|
|
325
326
|
TypeParameters.instance_eval do
|
326
|
-
define_pione_method('==', [TypeParameters], TypeBoolean) do |rec, other|
|
327
|
+
define_pione_method('==', [TypeParameters], TypeBoolean) do |vtable, rec, other|
|
327
328
|
PioneBoolean.new(rec.data == other.data)
|
328
329
|
end
|
329
330
|
|
330
|
-
define_pione_method("!=", [TypeParameters], TypeBoolean) do |rec, other|
|
331
|
-
PioneBoolean.not(rec.call_pione_method("==", other))
|
331
|
+
define_pione_method("!=", [TypeParameters], TypeBoolean) do |vtable, rec, other|
|
332
|
+
PioneBoolean.not(rec.call_pione_method(vtable, "==", other))
|
332
333
|
end
|
333
334
|
|
334
|
-
define_pione_method("[]", [TypeString], TypeSequence) do |rec, name|
|
335
|
+
define_pione_method("[]", [TypeString], TypeSequence) do |vtable, rec, name|
|
335
336
|
rec.get(Variable.new(name.value))
|
336
337
|
end
|
337
338
|
|
338
|
-
define_pione_method("get", [TypeString], TypeSequence) do |rec, name|
|
339
|
+
define_pione_method("get", [TypeString], TypeSequence) do |vtable, rec, name|
|
339
340
|
rec.get(Variable.new(name.value))
|
340
341
|
end
|
341
342
|
|
@@ -343,20 +344,20 @@ module Pione
|
|
343
344
|
"set",
|
344
345
|
[TypeString, TypeSequence],
|
345
346
|
TypeParameters
|
346
|
-
) do |rec, name, val|
|
347
|
+
) do |vtable, rec, name, val|
|
347
348
|
rec.set(Variable.new(name.value), val)
|
348
349
|
end
|
349
350
|
|
350
|
-
define_pione_method("empty?", [], TypeBoolean) do |rec|
|
351
|
+
define_pione_method("empty?", [], TypeBoolean) do |vtable, rec|
|
351
352
|
PioneBoolean.new(rec.empty?)
|
352
353
|
end
|
353
354
|
|
354
|
-
define_pione_method("as_string", [], TypeString) do |rec|
|
355
|
+
define_pione_method("as_string", [], TypeString) do |vtable, rec|
|
355
356
|
PioneString.new(rec.string_form)
|
356
357
|
end
|
357
358
|
|
358
|
-
define_pione_method("str", [], TypeString) do |rec|
|
359
|
-
rec.call_pione_method("as_string")
|
359
|
+
define_pione_method("str", [], TypeString) do |vtable, rec|
|
360
|
+
rec.call_pione_method(vtable, "as_string")
|
360
361
|
end
|
361
362
|
end
|
362
363
|
end
|