ffi-value 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/ffi-value.gemspec +1 -1
  3. data/lib/ffi-value.rb +39 -1
  4. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 642d80f3177db30bb7b0edc8b11e40db7724753ef580fbb4ecc329fd6fdf70bd
4
- data.tar.gz: 6162c5c9ad16273bad288edd041e7c889b508da08191cec630e36cba44700c78
3
+ metadata.gz: c44b2c700443f80945a065401279350b867acefdb9296f13cf5e0e73f70562f3
4
+ data.tar.gz: e373b704c61d10f617fa690b2854fdcf6953439eeb8bf12daa37ba6c4ba95b0d
5
5
  SHA512:
6
- metadata.gz: 328019333d87b32f242659853318a90b1182a8a25e48c10dffc6b2bf09959cc094429f58108d3ac9e4fe33bbbe62245f3a7b7c05af0ffa9a4c3823b55cd3bc14
7
- data.tar.gz: 20476297df0b8e5404f0e545ac832c4ee38a98aeeff23bfb6159d51b1532db8306660bd19b520860edcdf2f054821449a9d32f2f164c10829e0877cb9232f684
6
+ metadata.gz: 34fc9f3771ea92aa7f8f1eba0d3ec8741f7a8e537303370296e20a2a15f9fa99727ac9024b1666d98c9ad222b687e1ab68ae099d7aabcee8277f8c1157af0a2a
7
+ data.tar.gz: c0108059385c6bcd071590a3d2e9acae94f74c306b0b1da6a854b99425b5f2e15a992312d404025cbc9c960b58abe020aa3cb276b0cf1c6fcf96e462703e54da
data/ffi-value.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'ffi-value'
3
- s.version = "0.1.1"
3
+ s.version = "0.1.3"
4
4
  s.author = "Brice Videau"
5
5
  s.email = "bvideau@anl.gov"
6
6
  s.homepage = "https://github.com/alcf-perfengr/ffi-value"
data/lib/ffi-value.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'ffi'
2
2
 
3
3
  module FFI
4
+ ValueStore = Hash.new { |h, k| h[k.object_id] = [k, 0] }
5
+ ValueStoreMutex = Mutex.new
6
+
4
7
  m = Module.new do
5
8
  extend FFI::DataConverter
6
9
  if FFI::Type::POINTER.size == 8
@@ -22,7 +25,42 @@ module FFI
22
25
  end
23
26
  end
24
27
 
25
- typedef m, :value
28
+ if TypeDefs.frozen?
29
+ t = TypeDefs.dup
30
+ remove_const(:TypeDefs)
31
+ const_set(:TypeDefs, t)
32
+ typedef m, :value
33
+ TypeDefs.freeze
34
+ else
35
+ typedef m, :value
36
+ end
37
+
38
+ def self.inc_ref(object)
39
+ refcount = nil
40
+ ValueStoreMutex.synchronize {
41
+ _, refcount = ValueStore[object.object_id]
42
+ refcount += 1
43
+ ValueStore[object.object_id] = [object, refcount]
44
+ }
45
+ refcount
46
+ end
47
+
48
+ def self.dec_ref(object)
49
+ refcount = nil
50
+ ValueStoreMutex.synchronize {
51
+ _, refcount = ValueStore[object.object_id]
52
+ refcount -= 1
53
+ if (refcount <= 0) then
54
+ ValueStore.delete(object.object_id)
55
+ else
56
+ ValueStore[object.object_id] = [object, refcount]
57
+ end
58
+ }
59
+ if refcount < 0
60
+ raise ArgumentError.new("Object: #{object.object_id} was not previously referenced!")
61
+ end
62
+ refcount
63
+ end
26
64
 
27
65
  class AbstractMemory
28
66
  if FFI::Type::POINTER.size == 8
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-value
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brice Videau
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-25 00:00:00.000000000 Z
11
+ date: 2024-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -43,7 +43,7 @@ homepage: https://github.com/alcf-perfengr/ffi-value
43
43
  licenses:
44
44
  - BSD-3-Clause
45
45
  metadata: {}
46
- post_install_message:
46
+ post_install_message:
47
47
  rdoc_options: []
48
48
  require_paths:
49
49
  - lib
@@ -58,8 +58,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
58
  - !ruby/object:Gem::Version
59
59
  version: '0'
60
60
  requirements: []
61
- rubygems_version: 3.3.5
62
- signing_key:
61
+ rubygems_version: 3.4.20
62
+ signing_key:
63
63
  specification_version: 4
64
64
  summary: Allow passing ruby values instead of void* pointers
65
65
  test_files: []