sbdb 0.0.11 → 0.0.12
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.
- data/VERSION +1 -1
- data/lib/sbdb/weakhash.rb +59 -0
- metadata +38 -58
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.12
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module SBDB
|
2
|
+
# See http://eigenclass.org/hiki/deferred-finalizers-in-Ruby
|
3
|
+
# Not threadsafe.
|
4
|
+
class WeakHash
|
5
|
+
attr_reader :cache
|
6
|
+
def initialize cache = ::Hash.new
|
7
|
+
@cache = cache
|
8
|
+
@key_map = {}
|
9
|
+
@rev_cache = ::Hash.new { |h,k| h[k] = {} }
|
10
|
+
@reclaim_value = lambda do |value_id|
|
11
|
+
if @rev_cache.has_key? value_id
|
12
|
+
@rev_cache[value_id].each_key{ |key| @cache.delete key }
|
13
|
+
@rev_cache.delete value_id
|
14
|
+
end
|
15
|
+
end
|
16
|
+
@reclaim_key = lambda do |key_id|
|
17
|
+
@cache.delete @key_map.delete(key_id) if @key_map.has_key? key_id
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def []=(key, value)
|
22
|
+
case key
|
23
|
+
when Fixnum, Symbol, true, false
|
24
|
+
key2 = key
|
25
|
+
else
|
26
|
+
key2 = key.dup
|
27
|
+
end
|
28
|
+
@rev_cache[value.object_id][key2] = true
|
29
|
+
@cache[key2] = value.object_id
|
30
|
+
@key_map[key.object_id] = key2
|
31
|
+
|
32
|
+
ObjectSpace.define_finalizer(value, @reclaim_value)
|
33
|
+
ObjectSpace.define_finalizer(key, @reclaim_key)
|
34
|
+
value
|
35
|
+
end
|
36
|
+
|
37
|
+
def [](key)
|
38
|
+
value_id = @cache[key]
|
39
|
+
return ObjectSpace._id2ref(value_id) unless value_id.nil?
|
40
|
+
nil
|
41
|
+
rescue RangeError
|
42
|
+
nil
|
43
|
+
end
|
44
|
+
|
45
|
+
def each(&e)
|
46
|
+
@cache.each do |k, vid|
|
47
|
+
unless vid.nil?
|
48
|
+
obj =
|
49
|
+
begin
|
50
|
+
ObjectSpace._id2ref vid
|
51
|
+
rescue RangeError
|
52
|
+
next
|
53
|
+
end
|
54
|
+
yield k, obj
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
metadata
CHANGED
@@ -1,58 +1,46 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: sbdb
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 11
|
9
|
-
version: 0.0.11
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.12
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Denis Knauf
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-08-25 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: bdb
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70289576905920 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.2.6.4
|
31
22
|
type: :runtime
|
32
|
-
version_requirements: *id001
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: ref
|
35
23
|
prerelease: false
|
36
|
-
|
24
|
+
version_requirements: *70289576905920
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: ref
|
27
|
+
requirement: &70289576905240 !ruby/object:Gem::Requirement
|
37
28
|
none: false
|
38
|
-
requirements:
|
39
|
-
- -
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
|
42
|
-
- 0
|
43
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
44
33
|
type: :runtime
|
45
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70289576905240
|
46
36
|
description: Simple Ruby Berkeley DB wrapper library for bdb.
|
47
37
|
email: Denis.Knauf@gmail.com
|
48
38
|
executables: []
|
49
|
-
|
50
39
|
extensions: []
|
51
|
-
|
52
|
-
extra_rdoc_files:
|
40
|
+
extra_rdoc_files:
|
53
41
|
- LICENSE
|
54
42
|
- README.md
|
55
|
-
files:
|
43
|
+
files:
|
56
44
|
- AUTHORS
|
57
45
|
- README.md
|
58
46
|
- VERSION
|
@@ -61,38 +49,30 @@ files:
|
|
61
49
|
- lib/sbdb/db.rb
|
62
50
|
- lib/sbdb/environment.rb
|
63
51
|
- lib/sbdb/transaction.rb
|
52
|
+
- lib/sbdb/weakhash.rb
|
64
53
|
- LICENSE
|
65
|
-
has_rdoc: true
|
66
54
|
homepage: http://github.com/ruby-bdb/sbdb
|
67
55
|
licenses: []
|
68
|
-
|
69
56
|
post_install_message:
|
70
57
|
rdoc_options: []
|
71
|
-
|
72
|
-
require_paths:
|
58
|
+
require_paths:
|
73
59
|
- lib
|
74
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
61
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
|
80
|
-
|
81
|
-
version: "0"
|
82
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
67
|
none: false
|
84
|
-
requirements:
|
85
|
-
- -
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
|
88
|
-
- 0
|
89
|
-
version: "0"
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
90
72
|
requirements: []
|
91
|
-
|
92
73
|
rubyforge_project:
|
93
|
-
rubygems_version: 1.
|
74
|
+
rubygems_version: 1.8.9
|
94
75
|
signing_key:
|
95
76
|
specification_version: 3
|
96
77
|
summary: Simple Ruby Berkeley DB
|
97
78
|
test_files: []
|
98
|
-
|