tsafe 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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -5,8 +5,8 @@
5
5
  # h['test'] = 'trala'
6
6
  # ret = h['test']
7
7
  class Tsafe::MonHash < ::Hash
8
- @@tsafe_rwmutex_w_methods = [:[]=, :clear, :delete, :delete_if, :keep_if, :merge!, :rehash, :reject!, :replace, :select!, :shift, :store, :update, :values_at]
9
- @@tsafe_rwmutex_r_methods = [:each, :each_key, :each_pair, :each_value]
8
+ @@tsafe_mrswlock_w_methods = [:[]=, :clear, :delete, :delete_if, :keep_if, :merge!, :rehash, :reject!, :replace, :select!, :shift, :store, :update, :values_at]
9
+ @@tsafe_mrswlock_r_methods = [:each, :each_key, :each_pair, :each_value]
10
10
 
11
11
  include Tsafe::Mrswlock::SynModule
12
12
  end
@@ -2,13 +2,13 @@
2
2
  class Tsafe::Mrswlock
3
3
  @@debug = false
4
4
 
5
- #Sets various variables.
5
+ # Sets various variables.
6
6
  def initialize
7
7
  @reads = 0
8
8
  @w_mutex = Mutex.new
9
9
  end
10
10
 
11
- #Runs the given block through the read-synchronization.
11
+ # Runs the given block through the read-synchronization.
12
12
  def rsync
13
13
  begin
14
14
  while @w_mutex.locked?
@@ -24,7 +24,11 @@ class Tsafe::Mrswlock
24
24
  end
25
25
  end
26
26
 
27
- #Runs the given block through the write-synchronization (locks both reading and writing).
27
+ # Runs the given block through the write-synchronization (locks both reading and writing).
28
+ # ===Examples
29
+ # lock.wsync do
30
+ # #do something within lock.
31
+ # end
28
32
  def wsync
29
33
  @w_mutex.synchronize do
30
34
  #Wait for any reads to finish that might have started while we were getting the lock.
@@ -37,30 +41,46 @@ class Tsafe::Mrswlock
37
41
  end
38
42
  end
39
43
 
44
+ #This module can be included in order to painlessly make a thread-safe multi-reader-single-writer thread-safe copy of a class.
45
+ #===Examples
46
+ # class Tsafe::MonHash < ::Hash
47
+ # @@tsafe_mrswlock_w_methods = [:[]=, :clear, :delete, :delete_if, :keep_if, :merge!, :rehash, :reject!, :replace, :select!, :shift, :store, :update, :values_at]
48
+ # @@tsafe_mrswlock_r_methods = [:each, :each_key, :each_pair, :each_value]
49
+ # include Tsafe::Mrswlock::SynModule
50
+ # end
40
51
  module SynModule
41
52
  def self.included(base)
42
53
  base.to_s.split("::").inject(Object, :const_get).class_eval do
43
54
  #Yields the given block within the read-lock.
55
+ #===Examples
56
+ # obj._tsafe_rsync do
57
+ # #do something within read-lock.
58
+ # end
44
59
  def _tsafe_rsync(&block)
45
60
  @tsafe_mrswlock.rsync(&block)
46
61
  end
47
62
 
48
63
  #Yields the given block within the write-lock (and read-lock).
64
+ #===Examples
65
+ # obj._tsafe_wsync do
66
+ # #do something within write-lock.
67
+ # end
49
68
  def _tsafe_wsync(&block)
50
69
  @tsafe_mrswlock.rsync(&block)
51
70
  end
52
71
 
53
72
  #Rename initialize.
54
- alias_method(:initialize_rwmutex, :initialize)
73
+ alias_method(:initialize_mrswlock, :initialize)
55
74
 
56
75
  #Make another initialize-method that spawns the lock and then calls the original initialize.
57
76
  define_method(:initialize) do |*args, &block|
58
77
  @tsafe_mrswlock = Tsafe::Mrswlock.new
59
- return initialize_rwmutex(*args, &block)
78
+ return initialize_mrswlock(*args, &block)
60
79
  end
61
80
 
62
- base.class_variable_get(:@@tsafe_rwmutex_r_methods).each do |mname|
63
- newmname = "tsafe_rwmutex_#{mname}".to_sym
81
+ #Makes reader methods go through reader-lock.
82
+ base.class_variable_get(:@@tsafe_mrswlock_r_methods).each do |mname|
83
+ newmname = "tsafe_mrswlock_#{mname}".to_sym
64
84
  alias_method(newmname, mname)
65
85
 
66
86
  define_method(mname) do |*args, &block|
@@ -70,8 +90,9 @@ class Tsafe::Mrswlock
70
90
  end
71
91
  end
72
92
 
73
- base.class_variable_get(:@@tsafe_rwmutex_w_methods).each do |mname|
74
- newmname = "tsafe_rwmutex_#{mname}".to_sym
93
+ #Makes writer methods go through writer-lock.
94
+ base.class_variable_get(:@@tsafe_mrswlock_w_methods).each do |mname|
95
+ newmname = "tsafe_mrswlock_#{mname}".to_sym
75
96
  alias_method(newmname, mname)
76
97
 
77
98
  define_method(mname) do |*args, &block|
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{tsafe}
8
- s.version = "0.0.3"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: tsafe
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kasper Johansen
@@ -100,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- hash: 1681009258934768204
103
+ hash: 2392481904128949132
104
104
  segments:
105
105
  - 0
106
106
  version: "0"