Class: WorkQueue::FairQueue
- Inherits:
-
Object
- Object
- WorkQueue::FairQueue
- Defined in:
- lib/work_queue.rb
Instance Attribute Summary collapse
-
#size ⇒ Object
readonly
Returns the value of attribute size.
Instance Method Summary collapse
- #empty? ⇒ Boolean
-
#initialize(key, limit, &blk) ⇒ FairQueue
constructor
A new instance of FairQueue.
- #push(task, force:) ⇒ Object
- #shift ⇒ Object
Constructor Details
#initialize(key, limit, &blk) ⇒ FairQueue
Returns a new instance of FairQueue.
54 55 56 57 58 59 |
# File 'lib/work_queue.rb', line 54 def initialize(key, limit, &blk) @limit = limit @size = 0 @key = key @elements = Hash.new { |h, k| h[k] = blk.call } end |
Instance Attribute Details
#size ⇒ Object (readonly)
Returns the value of attribute size.
52 53 54 |
# File 'lib/work_queue.rb', line 52 def size @size end |
Instance Method Details
#empty? ⇒ Boolean
81 82 83 |
# File 'lib/work_queue.rb', line 81 def empty? @elements.empty? end |
#push(task, force:) ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/work_queue.rb', line 61 def push(task, force:) raise WorkQueueFull if !force && @size >= @limit key = task[@key] @elements[key].push(task, force: force) @size += 1 nil end |
#shift ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/work_queue.rb', line 69 def shift unless @elements.empty? key, queue = @elements.shift task = queue.shift @elements[key] = queue unless queue.empty? @size -= 1 task end end |