pione 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (270) hide show
  1. data/.gitignore +4 -3
  2. data/.simplecov +7 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +3 -0
  5. data/History.txt +13 -0
  6. data/README.md +2 -0
  7. data/Rakefile +16 -6
  8. data/bin/pione-val +5 -0
  9. data/example/AbstractRule/package.yml +1 -0
  10. data/example/HelloWorld/package.yml +2 -0
  11. data/example/HelloWorld/scenario/scenario.yml +2 -0
  12. data/example/LoopByTouch/LoopByTouch.pione +28 -0
  13. data/example/LoopByTouch/package.yml +1 -0
  14. data/example/MakePair/package.yml +2 -0
  15. data/example/MakePair/{data → scenario/input}/1.i +0 -0
  16. data/example/MakePair/{data → scenario/input}/2.i +0 -0
  17. data/example/MakePair/{data → scenario/input}/3.i +0 -0
  18. data/example/MakePair/{data → scenario/input}/4.i +0 -0
  19. data/example/MakePair/{data → scenario/input}/5.i +0 -0
  20. data/example/MakePair/scenario/scenario.yml +1 -0
  21. data/example/ScoreAggregation/ScoreAggregation.pione +122 -0
  22. data/example/ScoreAggregation/bin/apply-template.rb +10 -0
  23. data/example/ScoreAggregation/bin/histgram-graph.sh +18 -0
  24. data/example/ScoreAggregation/bin/mean-summary.rb +10 -0
  25. data/example/ScoreAggregation/bin/personal-bar-graph.sh +18 -0
  26. data/example/ScoreAggregation/bin/personal-pre-statistics.rb +37 -0
  27. data/example/ScoreAggregation/bin/total-mean.rb +10 -0
  28. data/example/ScoreAggregation/bin/total-statistics.rb +43 -0
  29. data/example/ScoreAggregation/generate-data.rb +63 -0
  30. data/example/ScoreAggregation/package.yml +1 -0
  31. data/example/ScoreAggregation/scenario/case1/input/A.score +15 -0
  32. data/example/ScoreAggregation/scenario/case1/input/B.score +15 -0
  33. data/example/ScoreAggregation/scenario/case1/input/C.score +15 -0
  34. data/example/ScoreAggregation/scenario/case1/input/D.score +15 -0
  35. data/example/ScoreAggregation/scenario/case1/input/E.score +15 -0
  36. data/example/ScoreAggregation/scenario/case1/input/F.score +15 -0
  37. data/example/ScoreAggregation/scenario/case1/input/G.score +15 -0
  38. data/example/ScoreAggregation/scenario/case1/input/H.score +15 -0
  39. data/example/ScoreAggregation/scenario/case1/input/I.score +15 -0
  40. data/example/ScoreAggregation/scenario/case1/input/J.score +15 -0
  41. data/example/ScoreAggregation/scenario/case1/input/K.score +15 -0
  42. data/example/ScoreAggregation/scenario/case1/input/L.score +15 -0
  43. data/example/ScoreAggregation/scenario/case1/input/M.score +15 -0
  44. data/example/ScoreAggregation/scenario/case1/input/N.score +15 -0
  45. data/example/ScoreAggregation/scenario/case1/input/O.score +15 -0
  46. data/example/ScoreAggregation/scenario/case1/input/P.score +15 -0
  47. data/example/ScoreAggregation/scenario/case1/input/Q.score +15 -0
  48. data/example/ScoreAggregation/scenario/case1/input/R.score +15 -0
  49. data/example/ScoreAggregation/scenario/case1/input/S.score +15 -0
  50. data/example/ScoreAggregation/scenario/case1/input/T.score +15 -0
  51. data/example/ScoreAggregation/scenario/case1/input/U.score +15 -0
  52. data/example/ScoreAggregation/scenario/case1/input/V.score +15 -0
  53. data/example/ScoreAggregation/scenario/case1/input/W.score +15 -0
  54. data/example/ScoreAggregation/scenario/case1/input/X.score +15 -0
  55. data/example/ScoreAggregation/scenario/case1/input/Y.score +15 -0
  56. data/example/ScoreAggregation/scenario/case1/input/Z.score +15 -0
  57. data/example/ScoreAggregation/scenario/case1/input/stat-template.erb +24 -0
  58. data/example/ScoreAggregation/scenario/case1/scenario.yml +3 -0
  59. data/example/{SequentialProcess/SequentialProcess.pione → SerialProcessing/SerialProcessing.pione} +0 -0
  60. data/example/SerialProcessing/package.yml +1 -0
  61. data/example/WorkflowPatterns/01_Sequence/Sequence.pione +21 -0
  62. data/example/WorkflowPatterns/02_PrallelSplit/ParallelSplit.pione +29 -0
  63. data/example/WorkflowPatterns/03_Synchronization/Synchronization.pione +30 -0
  64. data/example/WorkflowPatterns/04_ExclusiveChoice/ExclusiveChoice.pione +44 -0
  65. data/example/WorkflowPatterns/05_SimpleMerge/SimpleMerge.pione +44 -0
  66. data/example/WorkflowPatterns/06_MultiChoice/MultiChoice.pione +48 -0
  67. data/example/WorkflowPatterns/07_StructuredSynchronizingMerge/StructuredSynchronizingMerge.pione +71 -0
  68. data/example/WorkflowPatterns/08_MultiMerge/MultiMerge.pione +44 -0
  69. data/example/WorkflowPatterns/11_ImplicitTermination/ImplicitTermination.pione +29 -0
  70. data/example/WorkflowPatterns/12_MultipleInstancesWithoutSynchronization/MultipleInstancesWithoutSynchronization.pione +29 -0
  71. data/example/WorkflowPatterns/13_MultipleInstancesWithDesignTimeKnowledge/MultipleInstancesWithDesignTimeKnowledge.pione +28 -0
  72. data/example/WorkflowPatterns/14_MultipleInstancesWithRunTimeKnowledge/MultipleInstancesWithRunTimeKnowledge.pione +33 -0
  73. data/example/WorkflowPatterns/33_GeneralizedANDJoin/GeneralizedANDJoin.pione +21 -0
  74. data/example/WorkflowPatterns/37_LocalSynchronizingMerge/LocalSynchronizingMerge.pione +101 -0
  75. data/example/WorkflowPatterns/41_ThreadMerge/ThreadMerge.pione +43 -0
  76. data/example/WorkflowPatterns/42_ThreadSplit/ThreadSplit.pione +16 -0
  77. data/lib/pione.rb +23 -47
  78. data/lib/pione/agent/broker.rb +1 -1
  79. data/lib/pione/agent/input-generator.rb +1 -1
  80. data/lib/pione/agent/logger.rb +62 -49
  81. data/lib/pione/agent/messenger.rb +38 -0
  82. data/lib/pione/agent/rule-provider.rb +3 -3
  83. data/lib/pione/agent/task-worker.rb +14 -2
  84. data/lib/pione/agent/tuple-space-client.rb +1 -1
  85. data/lib/pione/agent/tuple-space-server-client-life-checker.rb +5 -3
  86. data/lib/pione/command.rb +2 -0
  87. data/lib/pione/command/basic-command.rb +1 -1
  88. data/lib/pione/command/pione-client.rb +57 -16
  89. data/lib/pione/command/pione-log.rb +5 -5
  90. data/lib/pione/command/pione-syntax-checker.rb +22 -7
  91. data/lib/pione/command/pione-task-worker.rb +36 -19
  92. data/lib/pione/command/pione-tuple-space-viewer.rb +3 -3
  93. data/lib/pione/command/pione-val.rb +40 -0
  94. data/lib/pione/component.rb +8 -0
  95. data/lib/pione/{system → component}/document.rb +13 -11
  96. data/lib/pione/component/package.rb +269 -0
  97. data/lib/pione/component/rule.rb +206 -0
  98. data/lib/pione/location/basic-location.rb +49 -7
  99. data/lib/pione/location/ftp-location.rb +19 -6
  100. data/lib/pione/location/local-location.rb +15 -6
  101. data/lib/pione/log.rb +4 -1
  102. data/lib/pione/log/{domain-info.rb → domain-log.rb} +23 -11
  103. data/lib/pione/{util/console-message.rb → log/message-log.rb} +16 -15
  104. data/lib/pione/log/process-log.rb +35 -86
  105. data/lib/pione/log/process-record.rb +24 -11
  106. data/lib/pione/log/system-log.rb +107 -0
  107. data/lib/pione/log/xes-log.rb +54 -48
  108. data/lib/pione/model.rb +1 -3
  109. data/lib/pione/model/assignment.rb +1 -0
  110. data/lib/pione/model/basic-model.rb +31 -15
  111. data/lib/pione/model/block.rb +1 -1
  112. data/lib/pione/model/boolean.rb +10 -23
  113. data/lib/pione/model/constraints.rb +12 -0
  114. data/lib/pione/model/data-expr.rb +31 -36
  115. data/lib/pione/model/feature-expr.rb +6 -23
  116. data/lib/pione/model/float.rb +29 -18
  117. data/lib/pione/model/integer.rb +44 -56
  118. data/lib/pione/model/keyed-sequence.rb +11 -4
  119. data/lib/pione/model/message.rb +4 -4
  120. data/lib/pione/model/ordinal-sequence.rb +12 -14
  121. data/lib/pione/model/package-expr.rb +53 -0
  122. data/lib/pione/model/parameters.rb +12 -11
  123. data/lib/pione/model/pione-method.rb +2 -2
  124. data/lib/pione/model/rule-expr.rb +30 -52
  125. data/lib/pione/model/sequence.rb +26 -26
  126. data/lib/pione/model/string.rb +13 -54
  127. data/lib/pione/model/ticket-expr.rb +12 -53
  128. data/lib/pione/model/type.rb +7 -1
  129. data/lib/pione/model/variable-table.rb +5 -4
  130. data/lib/pione/model/variable.rb +0 -5
  131. data/lib/pione/option/common-option.rb +2 -1
  132. data/lib/pione/option/task-worker-owner-option.rb +1 -1
  133. data/lib/pione/patch/drb-patch.rb +1 -1
  134. data/lib/pione/patch/em-ftpd-patch.rb +7 -0
  135. data/lib/pione/patch/rinda-patch.rb +53 -0
  136. data/lib/pione/patch/uri-patch.rb +5 -0
  137. data/lib/pione/relay/relay-socket.rb +2 -2
  138. data/lib/pione/rule-handler/action-handler.rb +71 -64
  139. data/lib/pione/rule-handler/basic-handler.rb +50 -32
  140. data/lib/pione/rule-handler/flow-handler.rb +51 -34
  141. data/lib/pione/rule-handler/update-criteria.rb +43 -20
  142. data/lib/pione/system.rb +13 -0
  143. data/lib/pione/system/domain-info.rb +34 -0
  144. data/lib/pione/system/global.rb +8 -1
  145. data/lib/pione/system/object.rb +1 -1
  146. data/lib/pione/transformer/expr-transformer.rb +3 -3
  147. data/lib/pione/transformer/literal-transformer.rb +3 -3
  148. data/lib/pione/transformer/rule-definition-transformer.rb +11 -9
  149. data/lib/pione/tuple-space/tuple-space-server-interface.rb +19 -1
  150. data/lib/pione/tuple-space/tuple-space-server.rb +9 -2
  151. data/lib/pione/tuple.rb +30 -0
  152. data/lib/pione/tuple/data-null-tuple.rb +14 -0
  153. data/lib/pione/tuple/message-tuple.rb +7 -0
  154. data/lib/pione/tuple/process-log-tuple.rb +13 -0
  155. data/lib/pione/tuple/touch-tuple.rb +14 -0
  156. data/lib/pione/uri-scheme/myftp-scheme.rb +45 -0
  157. data/lib/pione/util.rb +18 -0
  158. data/lib/pione/util/cpu.rb +20 -0
  159. data/lib/pione/util/error-report.rb +9 -1
  160. data/lib/pione/util/evaluatable.rb +47 -0
  161. data/lib/pione/util/ftp-server.rb +468 -0
  162. data/lib/pione/util/id.rb +39 -0
  163. data/lib/pione/util/indentation.rb +19 -0
  164. data/lib/pione/util/ip-address.rb +35 -0
  165. data/lib/pione/util/misc.rb +0 -47
  166. data/lib/pione/util/uuid.rb +28 -0
  167. data/lib/pione/util/variable-holdable.rb +38 -0
  168. data/lib/pione/version.rb +1 -1
  169. data/pione.gemspec +16 -14
  170. data/test/agent/spec_logger.rb +35 -44
  171. data/test/agent/spec_messenger.rb +25 -0
  172. data/test/agent/spec_rule-provider.rb +1 -1
  173. data/test/agent/spec_task-worker.rb +7 -13
  174. data/test/{system → component}/spec_document.rb +20 -20
  175. data/test/component/spec_package.rb +77 -0
  176. data/test/component/spec_package/TestPackage/Test.pione +14 -0
  177. data/test/component/spec_package/TestPackage/bin/count +3 -0
  178. data/test/component/spec_package/TestPackage/package.yml +7 -0
  179. data/test/component/spec_package/TestPackage/scenario/case1/input/1.txt +1 -0
  180. data/test/component/spec_package/TestPackage/scenario/case1/scenario.yml +1 -0
  181. data/test/component/spec_rule.rb +140 -0
  182. data/test/endurance-test/graph.plt +12 -0
  183. data/test/endurance-test/run.sh +65 -0
  184. data/test/location/location-behavior.rb +125 -0
  185. data/test/location/spec_ftp-location.rb +28 -90
  186. data/test/location/spec_local-location.rb +26 -76
  187. data/test/log/raw-process-log/pione-process.log +710 -0
  188. data/test/log/spec_domain-log.rb +57 -0
  189. data/test/log/spec_message-log.rb +44 -0
  190. data/test/log/spec_process-log.rb +88 -0
  191. data/test/log/spec_process-record.rb +148 -0
  192. data/test/log/spec_system-log.rb +142 -0
  193. data/test/log/spec_xes-log.rb +2 -2
  194. data/test/model/spec_assignment.rb +26 -25
  195. data/test/model/spec_block.rb +51 -97
  196. data/test/model/spec_boolean.rb +0 -5
  197. data/test/model/spec_call-rule.rb +6 -6
  198. data/test/model/spec_data-expr.rb +0 -7
  199. data/test/model/spec_data-expr.yml +8 -0
  200. data/test/model/spec_float.rb +1 -1
  201. data/test/model/spec_float.yml +13 -0
  202. data/test/model/spec_integer.rb +1 -1
  203. data/test/model/spec_integer.yml +12 -1
  204. data/test/model/spec_keyed-sequence.yml +5 -0
  205. data/test/model/spec_message.rb +2 -4
  206. data/test/model/spec_package-expr.rb +19 -0
  207. data/test/model/spec_parameters.rb +56 -88
  208. data/test/model/spec_pione-method.rb +15 -14
  209. data/test/model/spec_rule-expr.rb +4 -52
  210. data/test/model/spec_rule-expr.yml +11 -0
  211. data/test/model/spec_sequence.yml +6 -0
  212. data/test/model/spec_string.rb +21 -13
  213. data/test/model/spec_string.yml +10 -2
  214. data/test/model/spec_ticket-expr.rb +25 -3
  215. data/test/model/spec_variable.rb +8 -8
  216. data/test/rule-handler/spec_action-handler.pione +37 -0
  217. data/test/rule-handler/spec_action-handler.rb +41 -97
  218. data/test/rule-handler/spec_flow-handler.rb +24 -30
  219. data/test/rule-handler/spec_update-criteria.pione +16 -0
  220. data/test/rule-handler/spec_update-criteria.rb +7 -4
  221. data/test/rule-handler/spec_update-criteria.yml +191 -0
  222. data/test/system/spec_domain-info.rb +25 -0
  223. data/test/test-util.rb +38 -228
  224. data/test/transformer/spec_block-transformer.rb +1 -1
  225. data/test/transformer/spec_expr-transformer.rb +30 -39
  226. data/test/transformer/spec_flow-element-transformer.rb +17 -17
  227. data/test/transformer/spec_literal-transformer.rb +3 -3
  228. data/test/transformer/spec_rule-definition-transformer.rb +55 -76
  229. data/test/{spec_data-finder.rb → tuple-space/spec_data-finder.rb} +1 -1
  230. data/test/{spec_data-finder.yml → tuple-space/spec_data-finder.yml} +0 -0
  231. data/test/tuple/spec_data-tuple.rb +5 -76
  232. data/test/tuple/spec_finished-tuple.rb +5 -46
  233. data/test/tuple/spec_message-tuple.rb +10 -0
  234. data/test/tuple/spec_task-tuple.rb +4 -110
  235. data/test/tuple/spec_touch-tuple.rb +14 -0
  236. data/test/tuple/tuple-behavior.rb +14 -0
  237. data/test/uri-scheme/spec_local-scheme.rb +1 -1
  238. data/test/uri-scheme/spec_myftp-scheme.rb +73 -0
  239. data/test/uri-scheme/spec_myftp-scheme.yml +85 -0
  240. data/test/util/spec_cpu.rb +8 -0
  241. data/test/util/spec_error-report.rb +42 -0
  242. data/test/util/spec_evaluatable.rb +18 -0
  243. data/test/util/spec_ftp-server.rb +249 -0
  244. data/test/util/spec_id.pione +14 -0
  245. data/test/util/spec_id.rb +77 -0
  246. data/test/util/spec_indentation.rb +77 -0
  247. data/test/util/spec_ip-address.rb +15 -0
  248. data/test/util/spec_uuid.rb +11 -0
  249. data/test/util/spec_variable-holdable.rb +69 -0
  250. metadata +282 -83
  251. data/bin/pione-eval +0 -111
  252. data/demo/demo.rb +0 -311
  253. data/demo/public/base.css +0 -94
  254. data/demo/public/demo.js +0 -107
  255. data/demo/public/index.html +0 -91
  256. data/demo/public/jquery-1.8.3.min.js +0 -2
  257. data/lib/pione/model/binary-operator.rb +0 -90
  258. data/lib/pione/model/list.rb +0 -108
  259. data/lib/pione/model/package.rb +0 -56
  260. data/lib/pione/model/rule-io.rb +0 -178
  261. data/lib/pione/model/rule.rb +0 -295
  262. data/lib/pione/system/identifier.rb +0 -61
  263. data/lib/pione/tuple/log-tuple.rb +0 -14
  264. data/lib/pione/util/terminal.rb +0 -78
  265. data/test/log/data/sample.log +0 -1003
  266. data/test/model/spec_binary-operator.rb +0 -39
  267. data/test/model/spec_package.rb +0 -15
  268. data/test/model/spec_rule.rb +0 -158
  269. data/test/spec_identifier.rb +0 -29
  270. data/test/spec_log.rb +0 -52
@@ -157,7 +157,7 @@ module Pione
157
157
  # rule Test2
158
158
  # end
159
159
  # #=> ConditionalBlock.new(
160
- # BinaryOperator::Equals.new(Variable.new('X'), 'a'),
160
+ # Message.new("==", Variable.new('X'), StringSequence.new([PioneString.new("a")])),
161
161
  # { true => [CallRule.new('Test1')],
162
162
  # :else => [CallRule.new('Test2')] })
163
163
  # @example
@@ -60,11 +60,6 @@ module Pione
60
60
  @value = value
61
61
  end
62
62
 
63
- # @api private
64
- def task_id_string
65
- "Boolean<#{@value}>"
66
- end
67
-
68
63
  # @api private
69
64
  def textize
70
65
  @value.to_s
@@ -86,14 +81,6 @@ module Pione
86
81
  @value == false
87
82
  end
88
83
 
89
- # Return ruby's boolean value.
90
- #
91
- # @return [Boolean]
92
- # ruby's boolean value
93
- def to_ruby
94
- return @value
95
- end
96
-
97
84
  def to_seq
98
85
  BooleanSequence.new([self])
99
86
  end
@@ -131,49 +118,49 @@ module Pione
131
118
  #
132
119
 
133
120
  TypeBoolean.instance_eval do
134
- define_pione_method("and", [TypeBoolean], TypeBoolean) do |rec, other|
121
+ define_pione_method("and", [TypeBoolean], TypeBoolean) do |vtable, rec, other|
135
122
  sequential_map2(TypeBoolean, rec, other) do |rec_elt, other_elt|
136
123
  rec_elt.value && other_elt.value
137
124
  end
138
125
  end
139
126
 
140
- define_pione_method("or", [TypeBoolean], TypeBoolean) do |rec, other|
127
+ define_pione_method("or", [TypeBoolean], TypeBoolean) do |vtable, rec, other|
141
128
  sequential_map2(TypeBoolean, rec, other) do |rec_elt, other_elt|
142
129
  rec_elt.value || other_elt.value
143
130
  end
144
131
  end
145
132
 
146
- define_pione_method("as_integer", [], TypeInteger) do |rec|
133
+ define_pione_method("as_integer", [], TypeInteger) do |vtable, rec|
147
134
  sequential_map1(TypeInteger, rec) {|rec| rec.value ? 1 : 0}
148
135
  end
149
136
 
150
- define_pione_method("as_float", [], TypeFloat) do |rec|
137
+ define_pione_method("as_float", [], TypeFloat) do |vtable, rec|
151
138
  sequential_map1(TypeFloat, rec) {|rec| rec.value ? 1.0 : 0.0}
152
139
  end
153
140
 
154
- define_pione_method("as_string", [], TypeString) do |rec|
141
+ define_pione_method("as_string", [], TypeString) do |vtable, rec|
155
142
  sequential_map1(TypeString, rec) {|rec| rec.value.to_s}
156
143
  end
157
144
 
158
- define_pione_method("as_data_expr", [], TypeDataExpr) do |rec|
145
+ define_pione_method("as_data_expr", [], TypeDataExpr) do |vtable, rec|
159
146
  sequential_map1(TypeDataExpr, rec) {|rec| rec.value.to_s}
160
147
  end
161
148
 
162
- define_pione_method("not", [], TypeBoolean) do |rec|
149
+ define_pione_method("not", [], TypeBoolean) do |vtable, rec|
163
150
  sequential_map1(TypeBoolean, rec) do |elt|
164
151
  not(elt.value)
165
152
  end
166
153
  end
167
154
 
168
- define_pione_method("every?", [], TypeBoolean) do |rec|
155
+ define_pione_method("every?", [], TypeBoolean) do |vtable, rec|
169
156
  PioneBoolean.new(not(rec.elements.include?(PioneBoolean.false))).to_seq
170
157
  end
171
158
 
172
- define_pione_method("any?", [], TypeBoolean) do |rec|
159
+ define_pione_method("any?", [], TypeBoolean) do |vtable, rec|
173
160
  PioneBoolean.new(rec.elements.include?(PioneBoolean.true)).to_seq
174
161
  end
175
162
 
176
- define_pione_method("one?", [], TypeBoolean) do |rec|
163
+ define_pione_method("one?", [], TypeBoolean) do |vtable, rec|
177
164
  PioneBoolean.new(rec.elements.select{|elt| elt == PioneBoolean.true}.size == 1).to_seq
178
165
  end
179
166
  end
@@ -11,6 +11,8 @@ module Pione
11
11
  end
12
12
  end
13
13
 
14
+ attr_reader :exprs
15
+
14
16
  # @param exprs [Array<BasicModel>]
15
17
  # constraint expressions
16
18
  def initialize(exprs)
@@ -29,6 +31,16 @@ module Pione
29
31
  res.kind_of?(BooleanSequence) and res.value
30
32
  end
31
33
  end
34
+
35
+ def ==(other)
36
+ return false unless other.kind_of?(self.class)
37
+ @exprs == other.exprs
38
+ end
39
+ alias :eql? :"=="
40
+
41
+ def hash
42
+ @exprs.hash
43
+ end
32
44
  end
33
45
  end
34
46
  end
@@ -122,11 +122,6 @@ module Pione
122
122
  VariableTable.check_include_variable(name)
123
123
  end
124
124
 
125
- # @api private
126
- def task_id_string
127
- "DataExpr<#{name}, [%s]>" % exceptions.map{|exc| exc.task_id_string}.join(",")
128
- end
129
-
130
125
  # @api private
131
126
  def textize
132
127
  "data_expr(\"#{name}\", [%s])" % [
@@ -412,127 +407,125 @@ module Pione
412
407
 
413
408
  forward! Proc.new{@elements.first}, :match, :name
414
409
 
415
- # Return true if the sequence accepts nonexistence matching. This is
416
- # determined that it includes null expression.
417
410
  def accept_nonexistence?
418
- @elements.any?{|elt| elt.accept_nonexistence?}
411
+ @elements.first.accept_nonexistence?
419
412
  end
420
413
  end
421
414
 
422
415
  TypeDataExpr.instance_eval do
423
- define_pione_method("==", [TypeDataExpr], TypeBoolean) do |rec, other|
416
+ define_pione_method("==", [TypeDataExpr], TypeBoolean) do |vtable, rec, other|
424
417
  PioneBoolean.new(rec == other).to_seq
425
418
  end
426
419
 
427
- define_pione_method("[]", [TypeInteger], TypeString) do |rec, index|
420
+ define_pione_method("[]", [TypeInteger], TypeString) do |vtable, rec, index|
428
421
  sequential_map2(TypeString, rec, index) do |rec_elt, index_elt|
429
422
  rec_elt.matched_data[index_elt.value]
430
423
  end.set_separator(DataExpr::SEPARATOR)
431
424
  end
432
425
 
433
- define_pione_method("all", [], TypeDataExpr) do |rec|
426
+ define_pione_method("all", [], TypeDataExpr) do |vtable, rec|
434
427
  rec.set_all
435
428
  end
436
429
 
437
- define_pione_method("all?", [], TypeBoolean) do |rec|
430
+ define_pione_method("all?", [], TypeBoolean) do |vtable, rec|
438
431
  rec.all?
439
432
  end
440
433
 
441
- define_pione_method("each", [], TypeDataExpr) do |rec|
434
+ define_pione_method("each", [], TypeDataExpr) do |vtable, rec|
442
435
  rec.set_each
443
436
  end
444
437
 
445
- define_pione_method("each?", [], TypeBoolean) do |rec|
438
+ define_pione_method("each?", [], TypeBoolean) do |vtable, rec|
446
439
  rec.each?
447
440
  end
448
441
 
449
- define_pione_method("stdout", [], TypeDataExpr) do |rec|
442
+ define_pione_method("stdout", [], TypeDataExpr) do |vtable, rec|
450
443
  rec.set_stdout
451
444
  end
452
445
 
453
- define_pione_method("stdout?", [], TypeBoolean) do |rec|
446
+ define_pione_method("stdout?", [], TypeBoolean) do |vtable, rec|
454
447
  rec.stdout?
455
448
  end
456
449
 
457
- define_pione_method("stderr", [], TypeDataExpr) do |rec|
450
+ define_pione_method("stderr", [], TypeDataExpr) do |vtable, rec|
458
451
  rec.set_stderr
459
452
  end
460
453
 
461
- define_pione_method("stderr?", [], TypeBoolean) do |rec|
454
+ define_pione_method("stderr?", [], TypeBoolean) do |vtable, rec|
462
455
  rec.stderr?
463
456
  end
464
457
 
465
- define_pione_method("neglect", [], TypeDataExpr) do |rec|
458
+ define_pione_method("neglect", [], TypeDataExpr) do |vtable, rec|
466
459
  rec.set_neglect
467
460
  end
468
461
 
469
- define_pione_method("neglect?", [], TypeBoolean) do |rec|
462
+ define_pione_method("neglect?", [], TypeBoolean) do |vtable, rec|
470
463
  rec.neglect?
471
464
  end
472
465
 
473
- define_pione_method("care", [], TypeDataExpr) do |rec|
466
+ define_pione_method("care", [], TypeDataExpr) do |vtable, rec|
474
467
  rec.set_care
475
468
  end
476
469
 
477
- define_pione_method("care?", [], TypeBoolean) do |rec|
470
+ define_pione_method("care?", [], TypeBoolean) do |vtable, rec|
478
471
  rec.care?
479
472
  end
480
473
 
481
- define_pione_method("write", [], TypeDataExpr) do |rec|
474
+ define_pione_method("write", [], TypeDataExpr) do |vtable, rec|
482
475
  rec.set_write
483
476
  end
484
477
 
485
- define_pione_method("write?", [], TypeBoolean) do |rec|
478
+ define_pione_method("write?", [], TypeBoolean) do |vtable, rec|
486
479
  rec.write?
487
480
  end
488
481
 
489
- define_pione_method("remove", [], TypeDataExpr) do |rec|
482
+ define_pione_method("remove", [], TypeDataExpr) do |vtable, rec|
490
483
  rec.set_remove
491
484
  end
492
485
 
493
- define_pione_method("remove?", [], TypeBoolean) do |rec|
486
+ define_pione_method("remove?", [], TypeBoolean) do |vtable, rec|
494
487
  rec.remove?
495
488
  end
496
489
 
497
- define_pione_method("touch", [], TypeDataExpr) do |rec|
490
+ define_pione_method("touch", [], TypeDataExpr) do |vtable, rec|
498
491
  rec.set_touch
499
492
  end
500
493
 
501
- define_pione_method("touch?", [], TypeBoolean) do |rec|
494
+ define_pione_method("touch?", [], TypeBoolean) do |vtable, rec|
502
495
  rec.touch?
503
496
  end
504
497
 
505
- define_pione_method("except", [TypeDataExpr], TypeDataExpr) do |rec, target|
498
+ define_pione_method("except", [TypeDataExpr], TypeDataExpr) do |vtable, rec, target|
506
499
  map2(rec, target) do |rec_elt, target_elt|
507
500
  rec_elt.except(target_elt)
508
501
  end
509
502
  end
510
503
 
511
- define_pione_method("exceptions", [], TypeDataExpr) do |rec|
504
+ define_pione_method("exceptions", [], TypeDataExpr) do |vtable, rec|
512
505
  rec.elements.map do |elt|
513
506
  elt.exceptions
514
507
  end.flatten.tap{|x| break DataExprSequence.new(x)}
515
508
  end
516
509
 
517
- define_pione_method("or", [TypeDataExpr], TypeDataExpr) do |rec, other|
510
+ define_pione_method("or", [TypeDataExpr], TypeDataExpr) do |vtable, rec, other|
518
511
  map2(rec, other) do |rec_elt, other_elt|
519
512
  DataExprOr.new([rec_elt, other_elt])
520
513
  end
521
514
  end
522
515
 
523
- define_pione_method("match", [TypeString], TypeString) do |rec, name|
516
+ define_pione_method("match", [TypeString], TypeString) do |vtable, rec, name|
524
517
  rec.match(name.value).to_a.inject(StringSequence.empty) do |seq, matched|
525
518
  seq.push(PioneString.new(matched))
526
519
  end
527
520
  end
528
521
 
529
- define_pione_method("match?", [TypeString], TypeBoolean) do |rec, name|
522
+ define_pione_method("match?", [TypeString], TypeBoolean) do |vtable, rec, name|
530
523
  sequential_map2(TypeBoolean, rec, name) do |rec_elt, name_elt|
531
524
  not(rec_elt.match(name_elt.value).nil?)
532
525
  end
533
526
  end
534
527
 
535
- define_pione_method("as_string", [], TypeString) do |rec|
528
+ define_pione_method("as_string", [], TypeString) do |vtable, rec|
536
529
  sequential_map1(TypeString, rec) do |rec_elt|
537
530
  case rec_elt
538
531
  when DataExprNull
@@ -545,8 +538,10 @@ module Pione
545
538
  end.set_separator(DataExpr::SEPARATOR)
546
539
  end
547
540
 
548
- define_pione_method("accept_nonexistence?", [], TypeBoolean) do |rec|
549
- PioneBoolean.new(rec.accept_nonexistence?).to_seq
541
+ define_pione_method("accept_nonexistence?", [], TypeBoolean) do |vtable, rec|
542
+ TypeBoolean.map1(rec) do |elt|
543
+ PioneBoolean.new(elt.accept_nonexistence?)
544
+ end
550
545
  end
551
546
  end
552
547
  end
@@ -84,11 +84,6 @@ module Pione::Model
84
84
 
85
85
  # SpecialFeature is a class for empty feature and boundless feature.
86
86
  class SpecialFeature < Expr
87
- # @api private
88
- def task_id_string
89
- "Feature::SpecialFeature<#{symbol}>"
90
- end
91
-
92
87
  # @api private
93
88
  def textize
94
89
  symbol
@@ -192,11 +187,6 @@ module Pione::Model
192
187
  super()
193
188
  end
194
189
 
195
- # @api private
196
- def task_id_string
197
- "Feature::UnaryOperator<#{self.operator},#{@symbol}>"
198
- end
199
-
200
190
  # @api private
201
191
  def textize
202
192
  "%s%s" % [self.operator, @symbol]
@@ -361,13 +351,6 @@ module Pione::Model
361
351
  return @elements.first.empty?
362
352
  end
363
353
 
364
- # @api private
365
- def task_id_string
366
- "Feature::Connective<#{self.class.name},[%s]>" % [
367
- @elements.map{|elt| elt.task_id_string}.join(",")
368
- ]
369
- end
370
-
371
354
  # @api private
372
355
  def textize
373
356
  "#{self.class.name}(%s)" % @elements.map{|elt| elt.textize}.join(",")
@@ -873,20 +856,20 @@ module Pione::Model
873
856
  end
874
857
 
875
858
  TypeFeature.instance_eval do
876
- define_pione_method("==", [TypeFeature], TypeBoolean) do |rec, other|
859
+ define_pione_method("==", [TypeFeature], TypeBoolean) do |vtable, rec, other|
877
860
  PioneBoolean.new(rec == other).to_seq
878
861
  end
879
862
 
880
- define_pione_method("!=", [TypeFeature], TypeBoolean) do |rec, other|
881
- PioneBoolean.not(rec.call_pione_method("==", other)).to_seq
863
+ define_pione_method("!=", [TypeFeature], TypeBoolean) do |vtable, rec, other|
864
+ PioneBoolean.not(rec.call_pione_method(vtable, "==", other)).to_seq
882
865
  end
883
866
 
884
- define_pione_method("as_string", [], TypeString) do |rec|
867
+ define_pione_method("as_string", [], TypeString) do |vtable, rec|
885
868
  PioneString.new(rec.as_string).to_seq
886
869
  end
887
870
 
888
- define_pione_method("str", [], TypeString) do |rec|
889
- rec.call_pione_method("as_string")
871
+ define_pione_method("str", [], TypeString) do |vtable, rec|
872
+ rec.call_pione_method(vtable, "as_string")
890
873
  end
891
874
  end
892
875
  end
@@ -7,14 +7,6 @@ module Pione
7
7
  "#PioneFloat{%s}" % @value
8
8
  end
9
9
 
10
- # Return ruby's value.
11
- #
12
- # @return [Float]
13
- # ruby's value
14
- def to_ruby
15
- return @value
16
- end
17
-
18
10
  # @api private
19
11
  def ==(other)
20
12
  return false unless other.kind_of?(self.class)
@@ -40,55 +32,74 @@ module Pione
40
32
  end
41
33
 
42
34
  TypeFloat.instance_eval do
43
- define_pione_method(">", [TypeFloat], TypeBoolean) do |rec, other|
35
+ define_pione_method(">", [TypeFloat], TypeBoolean) do |vtable, rec, other|
44
36
  BooleanSequence.new([PioneBoolean.new(rec.value > other.value)])
45
37
  end
46
38
 
47
- define_pione_method("<", [TypeFloat], TypeBoolean) do |rec, other|
39
+ define_pione_method("<", [TypeFloat], TypeBoolean) do |vtable, rec, other|
48
40
  BooleanSequence.new([PioneBoolean.new(rec.value < other.value)])
49
41
  end
50
42
 
51
- define_pione_method("+", [TypeFloat], TypeFloat) do |rec, other|
43
+ define_pione_method("+", [TypeFloat], TypeFloat) do |vtable, rec, other|
52
44
  map2(rec, other) do |rec_elt, other_elt|
53
45
  PioneFloat.new(rec_elt.value + other_elt.value)
54
46
  end
55
47
  end
56
48
 
57
- define_pione_method("-", [TypeFloat], TypeFloat) do |rec, other|
49
+ define_pione_method("-", [TypeFloat], TypeFloat) do |vtable, rec, other|
58
50
  map2(rec, other) do |rec_elt, other_elt|
59
51
  PioneFloat.new(rec_elt.value - other_elt.value)
60
52
  end
61
53
  end
62
54
 
63
- define_pione_method("*", [TypeFloat], TypeFloat) do |rec, other|
55
+ define_pione_method("*", [TypeFloat], TypeFloat) do |vtable, rec, other|
64
56
  PioneFloat.new(rec.value * other.value)
65
57
  end
66
58
 
67
- define_pione_method("%", [TypeFloat], TypeFloat) do |rec, other|
59
+ define_pione_method("%", [TypeFloat], TypeFloat) do |vtable, rec, other|
68
60
  # TODO: zero division error
69
61
  PioneFloat.new(rec.value % other.value)
70
62
  end
71
63
 
72
- define_pione_method("/", [TypeFloat], TypeFloat) do |rec, other|
64
+ define_pione_method("/", [TypeFloat], TypeFloat) do |vtable, rec, other|
73
65
  # TODO: zero division error
74
66
  PioneFloat.new(rec.value / other.value)
75
67
  end
76
68
 
77
- define_pione_method("as_string", [], TypeString) do |rec|
69
+ define_pione_method("as_string", [], TypeString) do |vtable, rec|
78
70
  sequential_map1(TypeString, rec) do |elt|
79
71
  elt.value.to_s
80
72
  end
81
73
  end
82
74
 
83
- define_pione_method("as_integer", [], TypeInteger) do |rec|
75
+ define_pione_method("as_integer", [], TypeInteger) do |vtable, rec|
84
76
  sequential_map1(TypeInteger, rec) do |elt|
85
77
  elt.value.to_i
86
78
  end
87
79
  end
88
80
 
89
- define_pione_method("as_float", [], TypeFloat) do |rec|
81
+ define_pione_method("as_float", [], TypeFloat) do |vtable, rec|
90
82
  rec
91
83
  end
84
+
85
+ # sin : float
86
+ define_pione_method("sin", [], TypeFloat) do |vtable, rec|
87
+ sequential_map1(TypeFloat, rec) do |elt|
88
+ Math.sin(elt.value)
89
+ end
90
+ end
91
+
92
+ # cos : float
93
+ define_pione_method("cos", [], TypeFloat) do |vtable, rec|
94
+ sequential_map1(TypeFloat, rec) do |elt|
95
+ Math.cos(elt.value)
96
+ end
97
+ end
98
+
99
+ # abs : float
100
+ define_pione_method("abs", [], TypeFloat) do |vtable, rec|
101
+ sequential_map1(TypeFloat, rec) {|elt| elt.value.abs}
102
+ end
92
103
  end
93
104
  end
94
105
  end