ffi-value 0.1.2 → 0.1.3

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/ffi-value.gemspec +1 -1
  3. data/lib/ffi-value.rb +30 -0
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc8f19d7e2f3689c28657b502559f603554417e47108dc76afc2c0a97d941e81
4
- data.tar.gz: f161557be237cec2c59bd2f697d0fff0177fc8f325221e3e2fbde2a73fe18295
3
+ metadata.gz: c44b2c700443f80945a065401279350b867acefdb9296f13cf5e0e73f70562f3
4
+ data.tar.gz: e373b704c61d10f617fa690b2854fdcf6953439eeb8bf12daa37ba6c4ba95b0d
5
5
  SHA512:
6
- metadata.gz: 9eea815db9a231fbc777b0f26bdc3842002b816ebadce7c8b16b769da6aeeab8bee34f094bce1583de95ef4551a0d5e56432ce4d8d8f289307549960e71ae495
7
- data.tar.gz: dc8e6dac092317193a0eb33f4e920f01072855eb59ddbefea6405c29f8c86e9996d847478317794225d7f7308724730103b84f46108f6df207d8a6de7586d7bf
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.2"
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
@@ -32,6 +35,33 @@ module FFI
32
35
  typedef m, :value
33
36
  end
34
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
64
+
35
65
  class AbstractMemory
36
66
  if FFI::Type::POINTER.size == 8
37
67
  def put_value(offset, value)
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.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brice Videau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-26 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
@@ -58,7 +58,7 @@ 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.15
61
+ rubygems_version: 3.4.20
62
62
  signing_key:
63
63
  specification_version: 4
64
64
  summary: Allow passing ruby values instead of void* pointers