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

Parameters:

  • value (Object) (defaults to: EMPTY)

    the initial value



240
241
242
243
# File 'lib/mutant/variable.rb', line 240

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 mvar

Returns:

  • (Object)


262
263
264
265
266
267
# File 'lib/mutant/variable.rb', line 262

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 into mvar, block on full

Parameters:

  • value (Object)

Returns:

  • (self)


250
251
252
253
254
255
256
257
# File 'lib/mutant/variable.rb', line 250

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

  self
end