Class: Fairy::VArray
- Inherits:
-
Object
- Object
- Fairy::VArray
- Includes:
- Enumerable
- Defined in:
- lib/fairy/share/varray.rb
Class Method Summary collapse
Instance Method Summary collapse
- #[](idx) ⇒ Object
- #[]=(idx, val) ⇒ Object
- #arrays_at(idx) ⇒ Object
- #arrays_each(&block) ⇒ Object
-
#arrays_put(idx, array) ⇒ Object
def set_arrays(array) @arrays_mutex.synchronize do end.
-
#arrays_size ⇒ Object
arrays 操作.
- #arrays_size=(arrays_size) ⇒ Object
- #each(&block) ⇒ Object
- #index_on_arrays(idx) ⇒ Object
-
#initialize(arrays_size) ⇒ VArray
constructor
size がまだ決まっていないときには nil を指定する.
- #size ⇒ Object
Constructor Details
#initialize(arrays_size) ⇒ VArray
size がまだ決まっていないときには nil を指定する
17 18 19 20 21 22 |
# File 'lib/fairy/share/varray.rb', line 17 def initialize(arrays_size) @arrays = [] @arrays_size = arrays_size @arrays_mutex = Mutex.new @arrays_cv = XThread::ConditionVariable.new end |
Class Method Details
.output(fairy, opts) ⇒ Object
12 13 14 |
# File 'lib/fairy/share/varray.rb', line 12 def self.output(fairy, opts) OutputVArray.output(fairy, opts) end |
Instance Method Details
#[](idx) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/fairy/share/varray.rb', line 32 def [](idx) case idx when Integer ary_idx, idx = index_on_arrays(idx) return @arrays[ary_idx][idx] when Range ERR::Raise ERR::NoSupportClass, idx else ERR::Raise ERR::NoSupportClass, idx end end |
#[]=(idx, val) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/fairy/share/varray.rb', line 44 def []=(idx, val) case idx when Integer ary_idx, idx = index_on_arrays(idx) return @arrays[ary_idx][idx]=val else ERR::Raise ERR::NoSupportClass, idx end end |
#arrays_at(idx) ⇒ Object
108 109 110 111 112 113 114 115 |
# File 'lib/fairy/share/varray.rb', line 108 def arrays_at(idx) @arrays_mutex.synchronize do while @arrays[idx].nil? @arrays_cv.wait(@arrays_mutex) end @arrays[idx] end end |
#arrays_each(&block) ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/fairy/share/varray.rb', line 134 def arrays_each(&block) # array_size=されるまでまっている. arrays_size.times do |idx| ary = nil @arrays_mutex.synchronize do while @arrays[idx].nil? @arrays_cv.wait(@arrays_mutex) end ary = @arrays[idx] end yield ary end end |
#arrays_put(idx, array) ⇒ Object
def set_arrays(array)
@arrays_mutex.synchronize do
end
101 102 103 104 105 106 |
# File 'lib/fairy/share/varray.rb', line 101 def arrays_put(idx, array) @arrays_mutex.synchronize do @arrays[idx] = array @arrays_cv.broadcast end end |
#arrays_size ⇒ Object
arrays 操作
69 70 71 72 73 74 75 76 |
# File 'lib/fairy/share/varray.rb', line 69 def arrays_size @arrays_mutex.synchronize do while @arrays_size.nil? @arrays_cv.wait(@arrays_mutex) end @arrays_size end end |
#arrays_size=(arrays_size) ⇒ Object
78 79 80 81 82 83 |
# File 'lib/fairy/share/varray.rb', line 78 def arrays_size=(arrays_size) @arrays_mutex.synchronize do @arrays_size = arrays_size @arrays_cv.broadcast end end |
#each(&block) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/fairy/share/varray.rb', line 54 def each(&block) # set_arrayされるまでまっている. arrays_size.times do |idx| ary = nil @arrays_mutex.synchronize do while @arrays[idx].nil? @arrays_cv.wait(@arrays_mutex) end ary = @arrays[idx] end ary.each(&block) end end |
#index_on_arrays(idx) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/fairy/share/varray.rb', line 117 def index_on_arrays(idx) # array_size=されるまでまっている. arrays_size.times do |ary_idx| ary = nil @arrays_mutex.synchronize do while !(ary = @arrays[ary_idx]) @arrays_cv.wait(@arrays_mutex) end end ary_size = ary.size if idx < ary_size return ary_idx, idx end idx -= ary_size end end |
#size ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/fairy/share/varray.rb', line 24 def size size = 0 arrays_each do |array| size += array.size end size end |