Class: Foobara::WeakObjectSet::GarbageCleaner

Inherits:
Object
  • Object
show all
Defined in:
foobara-0.0.110/projects/weak_object_set/src/weak_object_set.rb

Instance Method Summary collapse

Constructor Details

#initialize(objects, key_to_object_id = nil, object_id_to_key = nil) ⇒ GarbageCleaner

Returns a new instance of GarbageCleaner.



4
5
6
7
8
# File 'foobara-0.0.110/projects/weak_object_set/src/weak_object_set.rb', line 4

def initialize(objects, key_to_object_id = nil, object_id_to_key = nil)
  @objects = objects
  @key_to_object_id = key_to_object_id
  @object_id_to_key = object_id_to_key
end

Instance Method Details

#cleanup_procObject



10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'foobara-0.0.110/projects/weak_object_set/src/weak_object_set.rb', line 10

def cleanup_proc
  @cleanup_proc ||= ->(object_id) {
    unless @deactivated
      @objects.delete(object_id)

      key = @object_id_to_key&.delete(object_id)

      if key
        @key_to_object_id.delete(key)
      end
    end
  }
end

#deactivateObject



34
35
36
# File 'foobara-0.0.110/projects/weak_object_set/src/weak_object_set.rb', line 34

def deactivate
  @deactivated = true
end

#track(object) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'foobara-0.0.110/projects/weak_object_set/src/weak_object_set.rb', line 24

def track(object)
  if @deactivated
    # :nocov:
    raise "Cannot track anymore objects since we have been deactivated"
    # :nocov:
  end

  ObjectSpace.define_finalizer(object, cleanup_proc)
end