Class: Hamster::Partitioned
- Inherits:
-
Realizable
- Object
- Realizable
- Hamster::Partitioned
- Defined in:
- lib/hamster/list.rb
Overview
One of the ‘List`s which gets its items from a Partitioner
Constant Summary
Constants included from List
Instance Method Summary collapse
-
#initialize(partitioner, buffer, mutex) ⇒ Partitioned
constructor
A new instance of Partitioned.
- #realize ⇒ Object
Methods inherited from Realizable
#cached_size?, #empty?, #head, #realized?, #size, #tail
Methods included from List
#<<, [], #add, #append, #at, #break, #cached_size?, #chunk, #clear, #combination, #cycle, #delete, #delete_at, #drop, #drop_while, #dup, #each, #each_chunk, empty, #eql?, #fill, #flat_map, #flatten, from_enum, #group_by, #hash, #indices, #init, #inits, #insert, #inspect, #intersperse, #last, #map, #merge, #merge_by, #partition, #permutation, #pop, #pretty_print, #respond_to?, #reverse, #rotate, #sample, #select, #size, #slice, #sort, #sort_by, #span, #split_at, #subsequences, #tails, #take, #take_while, #to_list, #transpose, #union, #uniq, #zip
Methods included from Enumerable
#<=>, #==, #compact, #each_index, #grep, #grep_v, #group_by, #inspect, #join, #partition, #pretty_print, #product, #reject, #sort_by, #sum, #to_set
Methods included from Enumerable
Constructor Details
#initialize(partitioner, buffer, mutex) ⇒ Partitioned
Returns a new instance of Partitioned.
1448 1449 1450 1451 |
# File 'lib/hamster/list.rb', line 1448 def initialize(partitioner, buffer, mutex) super() @partitioner, @buffer, @mutex = partitioner, buffer, mutex end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Hamster::List
Instance Method Details
#realize ⇒ Object
1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 |
# File 'lib/hamster/list.rb', line 1453 def realize # another thread may get ahead of us and null out @mutex mutex = @mutex mutex && mutex.synchronize do return if @head != Undefined # another thread got ahead of us while true if !@buffer.empty? @head = @buffer.shift @tail = Partitioned.new(@partitioner, @buffer, @mutex) # don't hold onto references # tail will keep references alive until end of list is reached @partitioner, @buffer, @mutex = nil, nil, nil return elsif @partitioner.done? @head, @size, @tail = nil, 0, self @partitioner, @buffer, @mutex = nil, nil, nil # allow them to be GC'd return else @partitioner.next_item end end end end |