1- module Edge
2- module Concurrent
1+ module Concurrent
2+ module Edge
33 # @!macro atomic_markable_reference
44 class AtomicMarkableReference < ::Concurrent ::Synchronization ::Object
5- # TODO: Remove once out of edge module
6- include ::Concurrent
7-
85 # @!macro [attach] atomic_markable_reference_method_initialize
96 def initialize ( value = nil , mark = false )
107 super
@@ -85,9 +82,7 @@ def mark
8582 #
8683 # @return [ImmutableArray] both the new value and the new mark
8784 def set ( new_val , new_mark )
88- ImmutableArray [ new_val , new_mark ] . tap do |pair |
89- @Reference . set pair
90- end
85+ @Reference . set ImmutableArray [ new_val , new_mark ]
9186 end
9287
9388 # @!macro [attach] atomic_markable_reference_method_update
@@ -104,7 +99,7 @@ def set(new_val, new_mark)
10499 # @return [ImmutableArray] the new value and new mark
105100 def update
106101 loop do
107- old_val , old_mark = value , marked?
102+ old_val , old_mark = @Reference . get
108103 new_val , new_mark = yield old_val , old_mark
109104
110105 if compare_and_set old_val , new_val , old_mark , new_mark
@@ -128,7 +123,7 @@ def update
128123 #
129124 # @raise [Concurrent::ConcurrentUpdateError] if the update fails
130125 def try_update
131- old_val , old_mark = value , marked?
126+ old_val , old_mark = @Reference . get
132127 new_val , new_mark = yield old_val , old_mark
133128
134129 unless compare_and_set old_val , new_val , old_mark , new_mark
0 commit comments