andromeda 0.1.2 → 0.1.3

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.
@@ -1,3 +1,3 @@
1
1
  module Andromeda
2
- # unimplemented
2
+ # unimplemented
3
3
  end
@@ -0,0 +1,83 @@
1
+ class ::Array
2
+
3
+ class Tag
4
+ attr_reader :key
5
+ attr_accessor :value
6
+
7
+ def initialize(key, value = nil)
8
+ @key = key
9
+ @value = value
10
+ end
11
+
12
+ def untagged ; value end
13
+
14
+ def <=>(other)
15
+ return key <=> other.key
16
+ end
17
+
18
+ def to_s
19
+ "Tag(#{key.to_s} => #{value.to_s})"
20
+ end
21
+
22
+ alias_method :inspect, :to_s
23
+ end
24
+
25
+ # Binary search for the first elem that is leq elem in this array in the range
26
+ # (low..high-1)
27
+ #
28
+ # The array is expected to be sorted in descending order.
29
+ #
30
+ # @param [Object] elem elem to search for
31
+ # @param [Fixnum] low lower bound (inclusive)
32
+ # @param [Fixnum] high upper bound (inclusive, -1 for last element)
33
+ # @return [Fixnum] index of first occurence leq than elem in self, or -1 if not found
34
+ #
35
+ def bin_search(elem, low = 0, high = -1)
36
+ high = size - 1 if high < 0
37
+ _bin_search elem, low, high
38
+ end
39
+
40
+ # Wraps all objects in self into ::Array::Tag instances using
41
+ # the provided block to extract a key
42
+ #
43
+ # @return [self]
44
+ #
45
+ def tag! ; map! { |e| Tag.new (yield e), e } end
46
+
47
+ # Untags Array::Tag instances, i.e. replaces them with their value
48
+ #
49
+ # @return [self]
50
+ #
51
+ def untag! ; map! { |e| e.untagged } end
52
+
53
+ private
54
+
55
+ def _bin_search(elem, low, high)
56
+ last = -1
57
+ while low <= high
58
+ sz = high - low
59
+ # On 2012 cpus, linear search is slightly faster than binary search
60
+ # if the number of searched elements is in the range of 50-100 elts
61
+ return _lin_search elem, low, high if (sz >> 6)
62
+ mid_index = low + (sz >> 1)
63
+ if (elem <=> self[mid_index]) == -1
64
+ low = mid_index + 1
65
+ else
66
+ last = mid_index
67
+ high = mid_index - 1
68
+ end
69
+ end
70
+ return last
71
+ end
72
+
73
+ def _lin_search(elem, low, high)
74
+ cur_index = low
75
+ while cur_index <= high
76
+ if (elem <=> self[cur_index]) == -1
77
+ then cur_index += 1
78
+ else return cur_index end
79
+ end
80
+ return -1
81
+ end
82
+
83
+ end
@@ -2,8 +2,8 @@ module Andromeda
2
2
 
3
3
  class Plan < Impl::ProtoPlan
4
4
 
5
- meth_spot :enter
6
- attr_spot :errors
5
+ spot_meth :enter
6
+ spot_attr :errors
7
7
 
8
8
  signal_spot :errors
9
9
 
@@ -37,9 +37,9 @@ module Andromeda
37
37
  def log ; @log = DefaultLogger.instance end
38
38
  def mark ; @mark = Id.zero unless @mark ; @mark end
39
39
 
40
- def on_enter(k, v)
40
+ def on_enter(key, val)
41
41
  exit_ = exit
42
- exit_ << v if exit_
42
+ exit_ << val if exit_
43
43
  end
44
44
 
45
45
  def to_short_s
@@ -31,7 +31,7 @@ module Andromeda
31
31
  def initialize(plan, name, here, dest = nil)
32
32
  raise ArgumentError, "#{plan} is not a Plan" unless plan.is_a? Plan
33
33
  raise ArgumentError, "#{name} is not a Symbol" unless name.is_a? Symbol
34
- unless plan.meth_spot_name?(name)
34
+ unless plan.spot_meth_name?(name)
35
35
  raise ArgumentError, "#{name} is not a known method spot name of #{plan}"
36
36
  end
37
37
  unless dest.nil? || dest.is_a?(Symbol)
@@ -114,8 +114,8 @@ module Andromeda
114
114
 
115
115
  def >>(target)
116
116
  return (plan >> target) unless dest_name
117
- unless plan.attr_spot_name?(dest_name)
118
- raise ArgumentError, "#{dest_name} is not an attr_spot_name"
117
+ unless plan.spot_attr_name?(dest_name)
118
+ raise ArgumentError, "#{dest_name} is not an spot_attr_name"
119
119
  end
120
120
  plan.send :"#{dest_name}=", target.entry
121
121
  plan.public_spot(dest_name)
@@ -6,25 +6,25 @@ module Andromeda
6
6
 
7
7
  module Guides
8
8
 
9
- def self.default ; DefaultGuide.instance end
10
- def self.single ; SinglePoolGuide.new end
9
+ def self.default=(new_guide)
10
+ DefaultGuideHolder.instance.guide = new_guide
11
+ end
12
+
13
+ def self.default ; DefaultGuideHolder.instance.guide end
14
+
15
+ def self.single ; SinglePoolGuide end
16
+ def self.shared_single ; SharedSinglePoolGuide end
17
+ def self.pool ; PoolGuide end
11
18
  def self.shared_pool ; SharedPoolGuide end
12
- def self.pool ; SharedPoolGuide.new end
13
19
  def self.local ; LocalGuide end
14
- def self.shared_single ; SharedSinglePoolGuide end
15
20
 
16
- class DefaultGuide < SimpleDelegator
21
+ class DefaultGuideHolder
17
22
  include Singleton
18
23
 
19
- def initialize
20
- super LocalGuide.instance
21
- end
24
+ attr_accessor :guide
22
25
 
23
- def instance=(new_instance)
24
- if new_instance.is_a?(Class) && new_instance.include?(Singleton)
25
- new_instance = new_instance.instance
26
- end
27
- instance.__setobj__ new_instance
26
+ def initialize
27
+ @guide = LocalGuide
28
28
  end
29
29
  end
30
30
 
@@ -53,12 +53,14 @@ module Andromeda
53
53
 
54
54
  # Passes all input and waits for the associated scope to return to the start value
55
55
  # (will only work if there is no concurrent modification to the associated scope)
56
- class ScopeWaiter < Plan
56
+ class Bracket < Plan
57
57
 
58
- def on_enter(k, v)
58
+ def init_guide ; ::Andromeda::Guides::LocalGuide end
59
+
60
+ def on_enter(key, val)
59
61
  scope_ = current_scope
60
62
  value_ = scope_.value
61
- super k, v
63
+ super key, val
62
64
  scope_.wait_until_eq value_
63
65
  end
64
66
  end
@@ -1,3 +1,3 @@
1
1
  module Andromeda
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require 'yard'
2
2
 
3
3
  class MethSpotHandler < YARD::Handlers::Ruby::AttributeHandler
4
- handles method_call(:meth_spot)
4
+ handles method_call(:spot_meth)
5
5
  namespace_only
6
6
 
7
7
  def process
@@ -10,7 +10,7 @@ class MethSpotHandler < YARD::Handlers::Ruby::AttributeHandler
10
10
  end
11
11
 
12
12
  class AttrSpotHandler < YARD::Handlers::Ruby::AttributeHandler
13
- handles method_call(:attr_spot)
13
+ handles method_call(:spot_attr)
14
14
  namespace_only
15
15
 
16
16
  def process
metadata CHANGED
@@ -1,16 +1,126 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: andromeda
3
3
  version: !ruby/object:Gem::Version
4
+ version: 0.1.3
4
5
  prerelease:
5
- version: 0.1.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Stefan Plantikow
9
9
  autorequire:
10
10
  bindir: script
11
11
  cert_chain: []
12
- date: 2012-05-01 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2012-05-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ requirement: &9592 !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ none: false
21
+ type: :runtime
22
+ version_requirements: *9592
23
+ name: json
24
+ prerelease: false
25
+ - !ruby/object:Gem::Dependency
26
+ requirement: &9656 !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ none: false
32
+ type: :runtime
33
+ version_requirements: *9656
34
+ name: atomic
35
+ prerelease: false
36
+ - !ruby/object:Gem::Dependency
37
+ requirement: &9700 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ none: false
43
+ type: :runtime
44
+ version_requirements: *9700
45
+ name: facter
46
+ prerelease: false
47
+ - !ruby/object:Gem::Dependency
48
+ requirement: &9744 !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ none: false
54
+ type: :runtime
55
+ version_requirements: *9744
56
+ name: statval
57
+ prerelease: false
58
+ - !ruby/object:Gem::Dependency
59
+ requirement: &9788 !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ none: false
65
+ type: :runtime
66
+ version_requirements: *9788
67
+ name: threadpool
68
+ prerelease: false
69
+ - !ruby/object:Gem::Dependency
70
+ requirement: &9832 !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ none: false
76
+ type: :development
77
+ version_requirements: *9832
78
+ name: rspec
79
+ prerelease: false
80
+ - !ruby/object:Gem::Dependency
81
+ requirement: &9876 !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ none: false
87
+ type: :development
88
+ version_requirements: *9876
89
+ name: simplecov
90
+ prerelease: false
91
+ - !ruby/object:Gem::Dependency
92
+ requirement: &9920 !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ none: false
98
+ type: :development
99
+ version_requirements: *9920
100
+ name: rake
101
+ prerelease: false
102
+ - !ruby/object:Gem::Dependency
103
+ requirement: &9964 !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ none: false
109
+ type: :development
110
+ version_requirements: *9964
111
+ name: yard
112
+ prerelease: false
113
+ - !ruby/object:Gem::Dependency
114
+ requirement: &10008 !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ none: false
120
+ type: :development
121
+ version_requirements: *10008
122
+ name: redcarpet
123
+ prerelease: false
14
124
  description: Andromeda is a light weight framework for complex event processing on
15
125
  multicore architectures. Andromeda users construct networks of plans that are interconnected
16
126
  via endpoint spots, describe how plans are scheduled onto threads, and process data
@@ -42,11 +152,14 @@ files:
42
152
  - lib/andromeda/id.rb
43
153
  - lib/andromeda/impl/atom.rb
44
154
  - lib/andromeda/impl/class_attr.rb
155
+ - lib/andromeda/impl/id.rb
45
156
  - lib/andromeda/impl/proto_plan.rb
46
157
  - lib/andromeda/impl/to_s.rb
47
158
  - lib/andromeda/impl/xor_id.rb
159
+ - lib/andromeda/impl_base.rb
48
160
  - lib/andromeda/kit.rb
49
161
  - lib/andromeda/map_reduce.rb
162
+ - lib/andromeda/patch/array_bin_search.rb
50
163
  - lib/andromeda/plan.rb
51
164
  - lib/andromeda/pool_guide.rb
52
165
  - lib/andromeda/spot.rb
@@ -63,23 +176,23 @@ rdoc_options: []
63
176
  require_paths:
64
177
  - lib
65
178
  required_ruby_version: !ruby/object:Gem::Requirement
66
- none: false
67
179
  requirements:
68
180
  - - ! '>='
69
181
  - !ruby/object:Gem::Version
70
182
  version: '0'
71
- required_rubygems_version: !ruby/object:Gem::Requirement
72
183
  none: false
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
185
  requirements:
74
186
  - - ! '>='
75
187
  - !ruby/object:Gem::Version
76
188
  version: '0'
189
+ none: false
77
190
  requirements: []
78
191
  rubyforge_project: andromeda
79
192
  rubygems_version: 1.8.12
80
193
  signing_key:
81
194
  specification_version: 3
82
- summary: light weght framework for complex event processing based on a dataflow DSL
195
+ summary: light weight framework for complex event processing based on a dataflow DSL
83
196
  test_files:
84
197
  - spec/spec_helper.rb
85
198
  has_rdoc: