Class: Mutant::Variable::MVar Private

Inherits:
Mutant::Variable show all
Defined in:
lib/mutant/variable.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Shared variable that can be written multiple times

ignore :reek:InstanceVariableAssumption

Constant Summary

Constants inherited from Mutant::Variable

EMPTY, TIMEOUT

Instance Method Summary collapse

Methods inherited from Mutant::Variable

#read, #take, #take_timeout, #try_put, #with

Constructor Details

#initialize(condition_variable:, mutex:, value: EMPTY) ⇒ undefined

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initialize object



281
282
283
284
# File 'lib/mutant/variable.rb', line 281

def initialize(condition_variable:, mutex:, value: EMPTY)
  super
  @empty = condition_variable.new
end

Instance Method Details

#modifyObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Modify value, blocks if empty



303
304
305
306
307
308
# File 'lib/mutant/variable.rb', line 303

def modify
  synchronize do
    wait_full
    perform_put(yield(@value))
  end
end

#put(value) ⇒ self

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Put value, block on full



291
292
293
294
295
296
297
298
# File 'lib/mutant/variable.rb', line 291

def put(value)
  synchronize do
    wait(@empty, &method(:empty?))
    perform_put(value)
  end

  self
end