rm-extensions 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,14 +3,29 @@ module RMExtensions
3
3
  # this module is included on Object, so these methods are available from anywhere in your code.
4
4
  module ObjectExtensions
5
5
 
6
+ # get a pointer for a symbol, which can be used as a key.
7
+ # the hash lookup table is kept per instance and not global so as objects dealloc,
8
+ # these mappings get freed.
9
+ def rmext_pointer_for_symbol(sym)
10
+ @rmext_pointers_for_symbols ||= {}
11
+ @rmext_pointers_for_symbols[sym] ||= begin
12
+ ptr = Pointer.new(:object)
13
+ ptr.assign(sym)
14
+ ptr
15
+ end
16
+ @rmext_pointers_for_symbols[sym]
17
+ end
18
+
6
19
  def rmext_weak_attr_accessor(*attrs)
7
20
  attrs.each do |attr|
8
- ptr = Pointer.new(:object)
9
- ptr.assign(attr.to_sym)
10
21
  define_method(attr) do
22
+ ptr = rmext_pointer_for_symbol(attr.to_sym)
23
+ # p "weak_getter", attr, ptr
11
24
  associatedValueForKey(ptr)
12
25
  end
13
26
  define_method("#{attr}=") do |val|
27
+ ptr = rmext_pointer_for_symbol(attr.to_sym)
28
+ # p "weak_setter", attr, ptr
14
29
  weaklyAssociateValue(val, withKey:ptr)
15
30
  val
16
31
  end
@@ -19,12 +34,14 @@ module RMExtensions
19
34
 
20
35
  def rmext_copy_attr_accessor(*attrs)
21
36
  attrs.each do |attr|
22
- ptr = Pointer.new(:object)
23
- ptr.assign(attr.to_sym)
24
37
  define_method(attr) do
38
+ ptr = rmext_pointer_for_symbol(attr.to_sym)
39
+ # p "copy_getter", attr, ptr
25
40
  associatedValueForKey(ptr)
26
41
  end
27
42
  define_method("#{attr}=") do |val|
43
+ ptr = rmext_pointer_for_symbol(attr.to_sym)
44
+ # p "copy_setter", attr, ptr
28
45
  associateCopyOfValue(val, withKey:ptr)
29
46
  val
30
47
  end
@@ -1,3 +1,3 @@
1
1
  module RMExtensions
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rm-extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: