pione 0.1.0
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.
- data/.gitignore +14 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +94 -0
- data/Rakefile +118 -0
- data/bin/pione-broker +5 -0
- data/bin/pione-clean +5 -0
- data/bin/pione-client +5 -0
- data/bin/pione-eval +111 -0
- data/bin/pione-relay +5 -0
- data/bin/pione-relay-account-db +5 -0
- data/bin/pione-relay-client-db +5 -0
- data/bin/pione-search-log +30 -0
- data/bin/pione-syntax-checker +5 -0
- data/bin/pione-task-worker +5 -0
- data/bin/pione-tuple-space-provider +5 -0
- data/bin/pione-tuple-space-receiver +5 -0
- data/bin/pione-tuple-space-viewer +5 -0
- data/demo/demo.rb +311 -0
- data/demo/public/base.css +94 -0
- data/demo/public/demo.js +107 -0
- data/demo/public/index.html +91 -0
- data/demo/public/jquery-1.8.3.min.js +2 -0
- data/example/CountChar/CountChar.pione +64 -0
- data/example/CountChar/misc/CountChar.rb +22 -0
- data/example/CountChar/text/aidokushono_insho.txt +32 -0
- data/example/CountChar/text/aikokuka_shokan.txt +108 -0
- data/example/CountChar/text/carlyle_hakubutsukan.txt +58 -0
- data/example/CountChar/text/dark_minister.txt +2440 -0
- data/example/CountChar/text/kaikano_otto.txt +61 -0
- data/example/CountChar/text/kaikon.txt +30 -0
- data/example/CountChar/text/nagashimano_shi.txt +45 -0
- data/example/CountChar/text/saikachibuchi.txt +80 -0
- data/example/CountChar/text/saikonihonno_josei.txt +91 -0
- data/example/CountChar/text/taishojugonenno_bundan.txt +21 -0
- data/example/FeatureExample/FeatureExample.pione +7 -0
- data/example/Fib/Fib.pione +56 -0
- data/example/Fib/FibBC.pione +56 -0
- data/example/HelloWorld/HelloWorld.pione +5 -0
- data/example/LucasNumber/LucasNumber.pione +64 -0
- data/example/MakePair/MakePair.pione +14 -0
- data/example/MakePair/data/1.i +0 -0
- data/example/MakePair/data/2.i +0 -0
- data/example/MakePair/data/3.i +0 -0
- data/example/MakePair/data/4.i +0 -0
- data/example/MakePair/data/5.i +0 -0
- data/example/SieveOfEratosthenes/SieveOfEratosthenes.pione +61 -0
- data/example/SingleParticlesWithRef/Makefile +289 -0
- data/example/SingleParticlesWithRef/SingleParticlesWithRef.Makefile +153 -0
- data/example/SingleParticlesWithRef/SingleParticlesWithRef.pione +116 -0
- data/example/SingleParticlesWithRef/SingleParticlesWithRefFull.pione +400 -0
- data/example/SingleParticlesWithRef/data/121p-shift-0-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-0-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-0-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-0-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-0-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-0-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-120-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-120-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-120-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-120-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-120-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-120-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-180-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-180-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-180-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-180-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-180-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-180-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-240-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-240-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-240-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-240-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-240-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-240-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-300-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-300-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-300-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-300-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-300-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-300-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-60-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-60-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-60-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-60-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-60-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-60-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-0-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-0-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-0-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-0-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-0-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-0-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-120-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-120-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-120-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-120-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-120-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-120-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-180-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-180-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-180-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-180-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-180-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-180-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-240-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-240-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-240-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-240-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-240-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-240-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-300-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-300-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-300-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-300-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-300-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-300-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-60-0-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-60-120-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-60-180-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-60-240-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-60-300-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift-noise-60-60-0.roi +0 -0
- data/example/SingleParticlesWithRef/data/121p-shift.pdb +3381 -0
- data/example/SingleParticlesWithRef/data/all.ref2d +0 -0
- data/example/SingleParticlesWithRef/data/all.ref3d +0 -0
- data/example/Sum/Sum.pione +52 -0
- data/example/SyntaxError/call_rule_error.pione +6 -0
- data/example/SyntaxError/feature_line_error.pione +7 -0
- data/example/SyntaxError/flow_block_error.pione +5 -0
- data/example/SyntaxError/input_line_error.pione +6 -0
- data/example/SyntaxError/invalid_rule_name.pione +6 -0
- data/example/SyntaxError/param_line_error.pione +7 -0
- data/example/SyntaxError/variable-binding-error.pione +11 -0
- data/lib/pione.rb +241 -0
- data/lib/pione/agent/basic-agent.rb +333 -0
- data/lib/pione/agent/broker.rb +274 -0
- data/lib/pione/agent/command-listener.rb +47 -0
- data/lib/pione/agent/input-generator.rb +194 -0
- data/lib/pione/agent/logger.rb +65 -0
- data/lib/pione/agent/process-manager.rb +38 -0
- data/lib/pione/agent/rule-provider.rb +64 -0
- data/lib/pione/agent/task-worker.rb +274 -0
- data/lib/pione/agent/trivial-routine-worker.rb +28 -0
- data/lib/pione/agent/tuple-space-client.rb +146 -0
- data/lib/pione/agent/tuple-space-server-client-life-checker.rb +29 -0
- data/lib/pione/command-option/basic-option.rb +42 -0
- data/lib/pione/command-option/child-process-option.rb +17 -0
- data/lib/pione/command-option/common-option.rb +29 -0
- data/lib/pione/command-option/daemon-option.rb +12 -0
- data/lib/pione/command-option/presence-notifier-option.rb +15 -0
- data/lib/pione/command-option/task-worker-owner-option.rb +17 -0
- data/lib/pione/command-option/tuple-space-provider-option.rb +26 -0
- data/lib/pione/command-option/tuple-space-provider-owner-option.rb +16 -0
- data/lib/pione/command-option/tuple-space-receiver-option.rb +12 -0
- data/lib/pione/command/basic-command.rb +126 -0
- data/lib/pione/command/child-process.rb +43 -0
- data/lib/pione/command/daemon-process.rb +18 -0
- data/lib/pione/command/front-owner-command.rb +37 -0
- data/lib/pione/command/pione-broker.rb +53 -0
- data/lib/pione/command/pione-clean.rb +16 -0
- data/lib/pione/command/pione-client.rb +273 -0
- data/lib/pione/command/pione-relay-account-db.rb +85 -0
- data/lib/pione/command/pione-relay-client-db.rb +80 -0
- data/lib/pione/command/pione-relay.rb +47 -0
- data/lib/pione/command/pione-syntax-checker.rb +103 -0
- data/lib/pione/command/pione-task-worker.rb +123 -0
- data/lib/pione/command/pione-tuple-space-provider.rb +87 -0
- data/lib/pione/command/pione-tuple-space-receiver.rb +55 -0
- data/lib/pione/command/pione-tuple-space-viewer.rb +151 -0
- data/lib/pione/command/tuple-space-provider-owner.rb +6 -0
- data/lib/pione/front/basic-front.rb +64 -0
- data/lib/pione/front/broker-front.rb +30 -0
- data/lib/pione/front/client-front.rb +28 -0
- data/lib/pione/front/relay-front.rb +19 -0
- data/lib/pione/front/task-worker-front.rb +16 -0
- data/lib/pione/front/task-worker-owner.rb +42 -0
- data/lib/pione/front/tuple-space-provider-front.rb +22 -0
- data/lib/pione/front/tuple-space-provider-owner.rb +11 -0
- data/lib/pione/front/tuple-space-receiver-front.rb +18 -0
- data/lib/pione/model/assignment.rb +89 -0
- data/lib/pione/model/basic-model.rb +395 -0
- data/lib/pione/model/binary-operator.rb +80 -0
- data/lib/pione/model/block.rb +233 -0
- data/lib/pione/model/boolean.rb +138 -0
- data/lib/pione/model/call-rule.rb +69 -0
- data/lib/pione/model/data-expr.rb +360 -0
- data/lib/pione/model/feature-expr.rb +794 -0
- data/lib/pione/model/float.rb +107 -0
- data/lib/pione/model/integer.rb +140 -0
- data/lib/pione/model/list.rb +104 -0
- data/lib/pione/model/message.rb +80 -0
- data/lib/pione/model/package.rb +48 -0
- data/lib/pione/model/parameters.rb +282 -0
- data/lib/pione/model/rule-expr.rb +120 -0
- data/lib/pione/model/rule-io.rb +166 -0
- data/lib/pione/model/rule.rb +294 -0
- data/lib/pione/model/string.rb +111 -0
- data/lib/pione/model/undefined-value.rb +24 -0
- data/lib/pione/model/variable-table.rb +315 -0
- data/lib/pione/model/variable.rb +87 -0
- data/lib/pione/parser/block-parser.rb +83 -0
- data/lib/pione/parser/common-parser.rb +145 -0
- data/lib/pione/parser/document-parser.rb +58 -0
- data/lib/pione/parser/error-message.yml +4 -0
- data/lib/pione/parser/expr-parser.rb +266 -0
- data/lib/pione/parser/feature-expr-parser.rb +105 -0
- data/lib/pione/parser/flow-element-parser.rb +181 -0
- data/lib/pione/parser/literal-parser.rb +182 -0
- data/lib/pione/parser/rule-definition-parser.rb +163 -0
- data/lib/pione/parser/syntax-error.rb +61 -0
- data/lib/pione/patch/array-patch.rb +3 -0
- data/lib/pione/patch/drb-patch.rb +467 -0
- data/lib/pione/patch/monitor-patch.rb +16 -0
- data/lib/pione/patch/rinda-patch.rb +759 -0
- data/lib/pione/patch/uri-patch.rb +66 -0
- data/lib/pione/relay/receiver-socket.rb +69 -0
- data/lib/pione/relay/relay-account-db.rb +55 -0
- data/lib/pione/relay/relay-client-db.rb +53 -0
- data/lib/pione/relay/relay-socket.rb +215 -0
- data/lib/pione/relay/trampoline.rb +22 -0
- data/lib/pione/relay/transmitter-socket.rb +167 -0
- data/lib/pione/resource/basic-resource.rb +92 -0
- data/lib/pione/resource/dropbox-resource.rb +106 -0
- data/lib/pione/resource/ftp.rb +84 -0
- data/lib/pione/resource/local.rb +113 -0
- data/lib/pione/rule-handler/action-handler.rb +184 -0
- data/lib/pione/rule-handler/basic-handler.rb +217 -0
- data/lib/pione/rule-handler/flow-handler.rb +339 -0
- data/lib/pione/rule-handler/root-handler.rb +23 -0
- data/lib/pione/rule-handler/system-handler.rb +13 -0
- data/lib/pione/system/common.rb +22 -0
- data/lib/pione/system/config.rb +20 -0
- data/lib/pione/system/document.rb +81 -0
- data/lib/pione/system/file-cache.rb +150 -0
- data/lib/pione/system/global.rb +346 -0
- data/lib/pione/system/identifier.rb +61 -0
- data/lib/pione/system/init.rb +16 -0
- data/lib/pione/system/object.rb +35 -0
- data/lib/pione/transformer/block-transformer.rb +23 -0
- data/lib/pione/transformer/document-transformer.rb +36 -0
- data/lib/pione/transformer/expr-transformer.rb +89 -0
- data/lib/pione/transformer/feature-expr-transformer.rb +56 -0
- data/lib/pione/transformer/flow-element-transformer.rb +66 -0
- data/lib/pione/transformer/literal-transformer.rb +76 -0
- data/lib/pione/transformer/rule-definition-transformer.rb +62 -0
- data/lib/pione/transformer/transformer-module.rb +37 -0
- data/lib/pione/tuple-space/data-finder.rb +165 -0
- data/lib/pione/tuple-space/presence-notifier.rb +83 -0
- data/lib/pione/tuple-space/relay.rb +9 -0
- data/lib/pione/tuple-space/tuple-space-provider.rb +85 -0
- data/lib/pione/tuple-space/tuple-space-receiver.rb +140 -0
- data/lib/pione/tuple-space/tuple-space-server-interface.rb +60 -0
- data/lib/pione/tuple-space/tuple-space-server.rb +156 -0
- data/lib/pione/tuple-space/update-criteria.rb +96 -0
- data/lib/pione/tuple/agent-tuple.rb +10 -0
- data/lib/pione/tuple/attribute-tuple.rb +7 -0
- data/lib/pione/tuple/base-uri-tuple.rb +9 -0
- data/lib/pione/tuple/basic-tuple.rb +317 -0
- data/lib/pione/tuple/bye-tuple.rb +9 -0
- data/lib/pione/tuple/command-tuple.rb +9 -0
- data/lib/pione/tuple/data-tuple.rb +18 -0
- data/lib/pione/tuple/dry-run-tuple.rb +8 -0
- data/lib/pione/tuple/exception-tuple.rb +11 -0
- data/lib/pione/tuple/finished-tuple.rb +17 -0
- data/lib/pione/tuple/foreground-tuple.rb +7 -0
- data/lib/pione/tuple/log-tuple.rb +14 -0
- data/lib/pione/tuple/process-info-tuple.rb +9 -0
- data/lib/pione/tuple/request-rule-tuple.rb +9 -0
- data/lib/pione/tuple/rule-tuple.rb +10 -0
- data/lib/pione/tuple/shift-tuple.rb +13 -0
- data/lib/pione/tuple/task-tuple.rb +36 -0
- data/lib/pione/tuple/task-worker-resource-tuple.rb +9 -0
- data/lib/pione/tuple/working-tuple.rb +13 -0
- data/lib/pione/uri-scheme/basic-scheme.rb +40 -0
- data/lib/pione/uri-scheme/broadcast-scheme.rb +11 -0
- data/lib/pione/uri-scheme/dropbox-scheme.rb +9 -0
- data/lib/pione/uri-scheme/local-scheme.rb +28 -0
- data/lib/pione/util/error-report.rb +12 -0
- data/lib/pione/util/log.rb +79 -0
- data/lib/pione/util/message.rb +155 -0
- data/lib/pione/util/misc.rb +73 -0
- data/lib/pione/util/terminal.rb +78 -0
- data/lib/pione/util/waiter-table.rb +53 -0
- data/lib/pione/version.rb +3 -0
- data/misc/env.sh +2 -0
- data/misc/test-drb-stop-service.rb +34 -0
- data/misc/test-ensure-and-thread-kill.rb +40 -0
- data/misc/test-many-waiters-client.rb +56 -0
- data/misc/test-many-waiters-server.rb +14 -0
- data/misc/write_and_take_test.png +0 -0
- data/misc/write_and_take_test.rb +36 -0
- data/pione.gemspec +49 -0
- data/test/agent/spec_basic-agent.rb +170 -0
- data/test/agent/spec_broker.rb +36 -0
- data/test/agent/spec_command-listener.rb +30 -0
- data/test/agent/spec_input-generator.rb +123 -0
- data/test/agent/spec_logger.rb +71 -0
- data/test/agent/spec_rule-provider.rb +65 -0
- data/test/agent/spec_task-worker.rb +307 -0
- data/test/agent/spec_tuple-space-client.rb +30 -0
- data/test/model/spec_assignment.rb +51 -0
- data/test/model/spec_binary-operator.rb +39 -0
- data/test/model/spec_block.rb +154 -0
- data/test/model/spec_boolean.rb +115 -0
- data/test/model/spec_call-rule.rb +23 -0
- data/test/model/spec_data-expr.rb +312 -0
- data/test/model/spec_feature-expr.rb +359 -0
- data/test/model/spec_feature-expr.yml +16 -0
- data/test/model/spec_float.rb +141 -0
- data/test/model/spec_integer.rb +141 -0
- data/test/model/spec_list.rb +26 -0
- data/test/model/spec_message.rb +42 -0
- data/test/model/spec_package.rb +15 -0
- data/test/model/spec_parameters.rb +148 -0
- data/test/model/spec_rule-expr.rb +66 -0
- data/test/model/spec_rule-io.rb +32 -0
- data/test/model/spec_rule.rb +158 -0
- data/test/model/spec_string.rb +106 -0
- data/test/model/spec_variable-table.rb +117 -0
- data/test/model/spec_variable.rb +84 -0
- data/test/parser/spec_block-parser.rb +5 -0
- data/test/parser/spec_block-parser.yml +85 -0
- data/test/parser/spec_common-parser.rb +281 -0
- data/test/parser/spec_expr-parser.rb +6 -0
- data/test/parser/spec_expr-parser.yml +82 -0
- data/test/parser/spec_feature-expr-parser.rb +32 -0
- data/test/parser/spec_feature-expr-parser.yml +25 -0
- data/test/parser/spec_flow-element-parser.rb +5 -0
- data/test/parser/spec_flow-element-parser.yml +180 -0
- data/test/parser/spec_literal-parser.rb +5 -0
- data/test/parser/spec_literal-parser.yml +123 -0
- data/test/parser/spec_rule-definition-parser.rb +5 -0
- data/test/parser/spec_rule-definition-parser.yml +93 -0
- data/test/patch/spec_rinda-patch.rb +32 -0
- data/test/patch/spec_uri-patch.rb +23 -0
- data/test/rule-handler/spec_action-handler.rb +135 -0
- data/test/rule-handler/spec_flow-handler.rb +127 -0
- data/test/spec_common.rb +14 -0
- data/test/spec_data-finder.rb +88 -0
- data/test/spec_data-finder.yml +115 -0
- data/test/spec_document.rb +76 -0
- data/test/spec_identifier.rb +29 -0
- data/test/spec_log.rb +52 -0
- data/test/spec_object.rb +20 -0
- data/test/spec_resource.rb +73 -0
- data/test/spec_update-criteria.rb +83 -0
- data/test/test-util.rb +223 -0
- data/test/transformer/spec_block-transformer.rb +26 -0
- data/test/transformer/spec_expr-transformer.rb +106 -0
- data/test/transformer/spec_feature-expr-transformer.rb +21 -0
- data/test/transformer/spec_flow-element-transformer.rb +154 -0
- data/test/transformer/spec_literal-transformer.rb +58 -0
- data/test/transformer/spec_rule-definition-transformer.rb +168 -0
- data/test/tuple-space/spec_tuple-space-provider.rb +36 -0
- data/test/tuple-space/spec_tuple-space-receiver.rb +32 -0
- data/test/tuple-space/spec_tuple-space-server.rb +49 -0
- data/test/tuple/spec_basic-tuple.rb +87 -0
- data/test/tuple/spec_data-tuple.rb +85 -0
- data/test/tuple/spec_finished-tuple.rb +61 -0
- data/test/tuple/spec_task-tuple.rb +127 -0
- data/test/tuple/spec_working-tuple.rb +58 -0
- data/test/uri-scheme/spec_broadcast-scheme.rb +40 -0
- data/test/uri-scheme/spec_dropbox-scheme.rb +31 -0
- data/test/uri-scheme/spec_local-scheme.rb +69 -0
- metadata +660 -0
@@ -0,0 +1,151 @@
|
|
1
|
+
module Pione
|
2
|
+
module Command
|
3
|
+
class PioneTupleSpaceViewer < BasicCommand
|
4
|
+
set_program_name("pione-tuple-space-viewer")
|
5
|
+
|
6
|
+
define_option('-i', '--identifier=NAME', 'show tuples that have the identifier') do |name|
|
7
|
+
@identifiers << name
|
8
|
+
end
|
9
|
+
|
10
|
+
define_option('-e', '--exclude=NAME', 'exclude the tuple identifier') do |name|
|
11
|
+
@exclusions << name
|
12
|
+
end
|
13
|
+
|
14
|
+
define_option('--package=NAME', 'show tuples which domain has the package name') do |name|
|
15
|
+
@package = name
|
16
|
+
end
|
17
|
+
|
18
|
+
define_option('--rule=NAME', 'show tuples which domain has the rule name') do |name|
|
19
|
+
@rule = name
|
20
|
+
end
|
21
|
+
|
22
|
+
define_option('--rule-path=NAME', 'show tuples which domain has the rule path') do |path|
|
23
|
+
@rule_path = path
|
24
|
+
end
|
25
|
+
|
26
|
+
define_option('--data-name=NAME', 'show tuples that has the the name') do |name|
|
27
|
+
@data_name = name
|
28
|
+
end
|
29
|
+
|
30
|
+
define_option(
|
31
|
+
'--type=TYPE',
|
32
|
+
'show the bag which has the type("bag", "read_waiter", or "take_waiter")'
|
33
|
+
) do |bag_type|
|
34
|
+
@bag_type = bag_type.to_sym
|
35
|
+
end
|
36
|
+
|
37
|
+
define_option('--client=ADDRESS', 'druby address of target client process') do |address|
|
38
|
+
@address = address
|
39
|
+
end
|
40
|
+
|
41
|
+
def initialize
|
42
|
+
@identifiers = []
|
43
|
+
@exclusions = []
|
44
|
+
@package = nil
|
45
|
+
@rule = nil
|
46
|
+
@rule_path = nil
|
47
|
+
@data_name = nil
|
48
|
+
@bag_type = nil
|
49
|
+
@tuple_space_servers = []
|
50
|
+
end
|
51
|
+
|
52
|
+
def prepare
|
53
|
+
require 'pp'
|
54
|
+
find_tuple_space_servers
|
55
|
+
|
56
|
+
# tuple space servers are not found
|
57
|
+
if @tuple_space_servers.empty?
|
58
|
+
abort("No tuple space servers.")
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def start
|
63
|
+
# print each bags
|
64
|
+
@tuple_space_servers.each do |address, tuple_space_server|
|
65
|
+
puts "TupleSpaceServer: %s" % Terminal.red(address)
|
66
|
+
puts "-"*78
|
67
|
+
if @bag_type == :bag or @bag_type.nil?
|
68
|
+
puts "*** bag ***"
|
69
|
+
show_bag(tuple_space_server, :bag)
|
70
|
+
end
|
71
|
+
if @bag_type == :read_waiter or @bag_type.nil?
|
72
|
+
puts "*** read waiter ***"
|
73
|
+
show_bag(tuple_space_server, :read_waiter)
|
74
|
+
end
|
75
|
+
if @bag_type == :take_waiter or @bag_type.nil?
|
76
|
+
puts "*** take waiter ***"
|
77
|
+
show_bag(tuple_space_server, :take_waiter)
|
78
|
+
end
|
79
|
+
|
80
|
+
# summary
|
81
|
+
puts "*** summary ***"
|
82
|
+
puts "task: %s" % tuple_space_server.task_size
|
83
|
+
puts "working: %s" % tuple_space_server.working_size
|
84
|
+
puts "finished: %s" % tuple_space_server.finished_size
|
85
|
+
puts "data: %s" % tuple_space_server.data_size
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def find_tuple_space_servers
|
92
|
+
if @address
|
93
|
+
@tuple_space_servers << [@address, get_tuple_space_server(@address)]
|
94
|
+
else
|
95
|
+
find_tuple_space_servers_in_range
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def find_tuple_space_servers_in_range
|
100
|
+
Global.client_front_port_range.each do |port|
|
101
|
+
begin
|
102
|
+
address = "druby://%s:%s" % [Global.my_ip_address, port]
|
103
|
+
@tuple_space_servers << [address, get_tuple_space_server(address)]
|
104
|
+
rescue
|
105
|
+
# ignore
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# Gets a tuple space server from the address.
|
111
|
+
def get_tuple_space_server(address)
|
112
|
+
ref = DRbObject.new_with_uri(address)
|
113
|
+
ref.ping
|
114
|
+
ref.tuple_space_server
|
115
|
+
end
|
116
|
+
|
117
|
+
def show_bag(tuple_space_server, type)
|
118
|
+
tuple_space_server.all_tuples(type).each do |tuple|
|
119
|
+
next if not(@identifiers.empty?) and not(@identifiers.include?(tuple.first.to_s))
|
120
|
+
next if @exclusions.include?(tuple.first.to_s)
|
121
|
+
|
122
|
+
t = Tuple.from_array(tuple)
|
123
|
+
|
124
|
+
# rule_path
|
125
|
+
if @rule_path
|
126
|
+
if t.respond_to?(:domain)
|
127
|
+
next unless /^(#{@rule_path})/.match(t.domain)
|
128
|
+
else
|
129
|
+
next
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
# name
|
134
|
+
if @data_name
|
135
|
+
if t.kind_of?(Tuple::Data) and t.respond_to?(:name)
|
136
|
+
next unless Model::DataExpr.new(@data_name).match(t.name)
|
137
|
+
else
|
138
|
+
next
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
# show
|
143
|
+
res = PP.pp(tuple, "")
|
144
|
+
res.gsub!(/\:[a-z]\w+/) {|s| Terminal.red(s) }
|
145
|
+
res.gsub!(/\#<(\S+)/) {|s| "#<%s" % Terminal.green($1) }
|
146
|
+
puts res
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Pione
|
2
|
+
module Front
|
3
|
+
# FrontError is raised when front server cannnot start.
|
4
|
+
class FrontError < StandardError; end
|
5
|
+
|
6
|
+
# This is base class for all PIONE front classes. PIONE fronts exist in each
|
7
|
+
# command and control its process.
|
8
|
+
class BasicFront < PioneObject
|
9
|
+
include DRbUndumped
|
10
|
+
extend Forwardable
|
11
|
+
|
12
|
+
attr_reader :command
|
13
|
+
attr_reader :uri
|
14
|
+
attr_reader :attrs
|
15
|
+
attr_reader :link
|
16
|
+
|
17
|
+
# Creates a front server as druby's service.
|
18
|
+
def initialize(command, port)
|
19
|
+
@command = command
|
20
|
+
# @uri = start_service(port, {:verbose => true})
|
21
|
+
@uri = start_service(port, {})
|
22
|
+
@attrs = {}
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns the pid.
|
26
|
+
def pid
|
27
|
+
Process.pid
|
28
|
+
end
|
29
|
+
|
30
|
+
def link
|
31
|
+
@__link__
|
32
|
+
end
|
33
|
+
|
34
|
+
# Terminates the front.
|
35
|
+
def terminate
|
36
|
+
DRb.stop_service
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
# Starts drb service and returns the URI.
|
42
|
+
def start_service(port, config)
|
43
|
+
if port.kind_of?(Range)
|
44
|
+
port = port.each
|
45
|
+
begin
|
46
|
+
uri = "druby://%s:%s" % [Global.my_ip_address, port.next]
|
47
|
+
@__link__ = DRb.start_service(uri, self, config)
|
48
|
+
rescue StopIteration => e
|
49
|
+
raise FrontError.new("You couldn't start front server.")
|
50
|
+
rescue
|
51
|
+
retry
|
52
|
+
end
|
53
|
+
else
|
54
|
+
begin
|
55
|
+
DRb.start_service(port ? "druby://%s:%s" % [Global.my_ip_address, port] : nil, self, config)
|
56
|
+
rescue => e
|
57
|
+
raise FrontError.new("You couldn't start front server: %s" % e.message)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
return DRb.uri
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Pione
|
2
|
+
module Front
|
3
|
+
# BrokerFront is a front class for pione-broker command.
|
4
|
+
class BrokerFront < BasicFront
|
5
|
+
include TaskWorkerOwner
|
6
|
+
|
7
|
+
def_delegator :@command, :broker
|
8
|
+
|
9
|
+
# Create a new front.
|
10
|
+
def initialize(command)
|
11
|
+
super(command, Global.broker_front_port_range)
|
12
|
+
initialize_task_worker_owner
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_tuple_space_server(connection_id)
|
16
|
+
broker.get_tuple_space_server(connection_id)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Override the method with adding task worker agent to broker.
|
20
|
+
def add_task_worker_front(task_worker_front, connection_id)
|
21
|
+
super
|
22
|
+
broker.task_workers << task_worker_front.agent
|
23
|
+
end
|
24
|
+
|
25
|
+
def set_tuple_space_receiver(uri)
|
26
|
+
Global.set_tuple_space_receiver_uri(uri)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Pione
|
2
|
+
module Front
|
3
|
+
# ClientFront is a front class for +pione-client+ command.
|
4
|
+
class ClientFront < BasicFront
|
5
|
+
extend Forwardable
|
6
|
+
include TaskWorkerOwner
|
7
|
+
include TupleSpaceProviderOwner
|
8
|
+
|
9
|
+
def_delegator :@command, :tuple_space_server
|
10
|
+
def_delegator :@command, :name
|
11
|
+
|
12
|
+
# Create a new front.
|
13
|
+
def initialize(command)
|
14
|
+
super(command, Global.client_front_port_range)
|
15
|
+
initialize_task_worker_owner
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns client's tuple space server for task workers.
|
19
|
+
# @param [String] connection_id
|
20
|
+
# connection id of task worker
|
21
|
+
# @return [TupleSpaceServer]
|
22
|
+
# tuple space server
|
23
|
+
def get_tuple_space_server(connection_id)
|
24
|
+
tuple_space_server
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Pione
|
2
|
+
module Front
|
3
|
+
class RelayFront < BasicFront
|
4
|
+
include TupleSpaceProviderOwner
|
5
|
+
|
6
|
+
def_delegator :@command, :presence_port
|
7
|
+
def_delegator :@command, :tuple_space_server
|
8
|
+
|
9
|
+
# Create a new front.
|
10
|
+
def initialize(command)
|
11
|
+
super(command, Global.relay_front_port_range)
|
12
|
+
end
|
13
|
+
|
14
|
+
def presence_notifier
|
15
|
+
tuple_space_provider
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Pione
|
2
|
+
module Front
|
3
|
+
# TaskWorkerFront is a front class for pione-task-worker command.
|
4
|
+
class TaskWorkerFront < BasicFront
|
5
|
+
def_delegator :@command, :caller_front
|
6
|
+
def_delegator :@command, :connection_id
|
7
|
+
def_delegator :@command, :agent
|
8
|
+
def_delegator :@command, :tuple_space_server
|
9
|
+
|
10
|
+
# Create a new front.
|
11
|
+
def initialize(command)
|
12
|
+
super(command, Global.task_worker_front_port_range)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Pione
|
2
|
+
module Front
|
3
|
+
module TaskWorkerOwner
|
4
|
+
attr_reader :task_worker_fronts
|
5
|
+
attr_reader :task_worker_front_connection_id
|
6
|
+
|
7
|
+
def get_tuple_space_server
|
8
|
+
raise NotImplementedError
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_task_worker_front(task_worker_front, connection_id)
|
12
|
+
@task_worker_fronts << task_worker_front
|
13
|
+
@task_worker_front_connection_id << connection_id
|
14
|
+
end
|
15
|
+
|
16
|
+
def remove_task_worker_front(task_worker_front, connection_id)
|
17
|
+
@task_worker_fronts.delete(task_worker_front)
|
18
|
+
@task_worker_front_connection_id.delete(connection_id)
|
19
|
+
end
|
20
|
+
|
21
|
+
def terminate
|
22
|
+
terminate_task_worker_fronts
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def initialize_task_worker_owner
|
28
|
+
@task_worker_fronts = []
|
29
|
+
@task_worker_front_connection_id = []
|
30
|
+
end
|
31
|
+
|
32
|
+
def terminate_task_worker_fronts
|
33
|
+
@task_worker_fronts.each do |front|
|
34
|
+
begin
|
35
|
+
front.terminate
|
36
|
+
rescue
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Pione
|
2
|
+
module Front
|
3
|
+
# TupleSpaceProviderFront is a front class for pione-tuple-space-provider
|
4
|
+
# command.
|
5
|
+
class TupleSpaceProviderFront < BasicFront
|
6
|
+
def_delegator :@command, :tuple_space_provider
|
7
|
+
def_delegator :@command, :presence_port
|
8
|
+
|
9
|
+
def initialize(command)
|
10
|
+
super(command, Global.tuple_space_provider_front_port_range)
|
11
|
+
end
|
12
|
+
|
13
|
+
def presence_notifier
|
14
|
+
tuple_space_provider
|
15
|
+
end
|
16
|
+
|
17
|
+
def tuple_space_servers
|
18
|
+
tuple_space_provider.tuple_space_servers
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Pione
|
2
|
+
module Front
|
3
|
+
# TupleSpaceProviderFront is a front class for pione-tuple-space-receiver
|
4
|
+
# command.
|
5
|
+
class TupleSpaceReceiverFront < BasicFront
|
6
|
+
def_delegator :@command, :tuple_space_receiver
|
7
|
+
def_delegator :@command, :presence_port
|
8
|
+
|
9
|
+
def initialize(command)
|
10
|
+
super(command, Global.tuple_space_receiver_front_port_range)
|
11
|
+
end
|
12
|
+
|
13
|
+
def presence_notifier
|
14
|
+
tuple_space_receiver
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module Pione::Model
|
2
|
+
# Assignment represents a value assignment for variable.
|
3
|
+
# @example
|
4
|
+
# # assigning a string
|
5
|
+
# $X := "a"
|
6
|
+
# # => Assignment.new(Variable.new('X'), PioneString.new('a'))
|
7
|
+
# @example
|
8
|
+
# # assigning a variable value
|
9
|
+
# $X := $Y
|
10
|
+
# # => Assignment.new(Variable.new('X'), Variable.new('Y'))
|
11
|
+
class Assignment < BasicModel
|
12
|
+
set_pione_model_type TypeAssignment
|
13
|
+
|
14
|
+
# Returns the variable part of assignment.
|
15
|
+
attr_reader :variable
|
16
|
+
|
17
|
+
# Returns the expression part of assignment.
|
18
|
+
attr_reader :expr
|
19
|
+
|
20
|
+
# Creates an assignment.
|
21
|
+
# @param [Variable] variable
|
22
|
+
# variable part of assignment
|
23
|
+
# @param [BasicModel] expr
|
24
|
+
# expression part of assignment
|
25
|
+
def initialize(variable, expr)
|
26
|
+
check_argument_type(variable, Variable)
|
27
|
+
check_argument_type(expr, BasicModel)
|
28
|
+
@variable = variable
|
29
|
+
@expr = expr
|
30
|
+
super()
|
31
|
+
end
|
32
|
+
|
33
|
+
# Evaluates the assignment. This method updates the variable table with the
|
34
|
+
# variable and expression. The expression is pushed into the table directory
|
35
|
+
# as it is because of lazy evaluation.
|
36
|
+
# @param [VariableTable] vtable
|
37
|
+
# variable table for evaluation
|
38
|
+
# @return [BasicModel]
|
39
|
+
# self
|
40
|
+
def eval(vtable)
|
41
|
+
vtable.set(@variable, @expr)
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_toplevel(b)
|
45
|
+
@variable.set_toplevel(b)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns true if the assignment is defined in toplevel.
|
49
|
+
# @return [Boolean]
|
50
|
+
# true if the assignment is defined in toplevel
|
51
|
+
def toplevel?
|
52
|
+
@variable.toplevel?
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns false because assignment form is complex(pair of variable and
|
56
|
+
# expression).
|
57
|
+
# @return [Boolean]
|
58
|
+
# false
|
59
|
+
def atomic?
|
60
|
+
false
|
61
|
+
end
|
62
|
+
|
63
|
+
# Returns true if the expression part of assignment includes variable.
|
64
|
+
# @return [Boolean]
|
65
|
+
# true if the expression part of assignment includes variable
|
66
|
+
def include_variable?
|
67
|
+
@expr.include_variable?
|
68
|
+
end
|
69
|
+
|
70
|
+
# @api private
|
71
|
+
def textize
|
72
|
+
"%s:=%s" % [@variable.textize, @expr.textize]
|
73
|
+
end
|
74
|
+
|
75
|
+
# Returns true if other is a variable object which name is same as myself.
|
76
|
+
# @api private
|
77
|
+
def ==(other)
|
78
|
+
return false unless other.kind_of?(self.class)
|
79
|
+
@variable == other.variable && @expr == other.expr
|
80
|
+
end
|
81
|
+
|
82
|
+
alias :eql? :"=="
|
83
|
+
|
84
|
+
# @api private
|
85
|
+
def hash
|
86
|
+
@variable.hash + @expr.hash
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|