Sha256: ebeee53c78e87995310f9cba8d69a9bdd5c0ed2b28224cef5ce6ab9e0d4e0870

Contents?: true

Size: 1.14 KB

Versions: 2

Compression:

Stored size: 1.14 KB

Contents

# * George Moschovitis  <gm@navel.gr>
# (c) 2002-2005 Navel, all rights reserved.
# $Id: array.rb 259 2005-02-15 08:54:54Z gmosx $

require 'sync'

module N

# A thread-safe array. We use a sync object instead of a mutex,
# because it is re-entrant.
# An exclusive lock is needed when writing, a shared lock IS NEEDED
# when reading

class SafeArray < Array
	
	attr :sync

	# gmosx: delegator is not used.
	
	def initialize(delegator = nil)
		@sync = ::Sync.new()
	end

	def << (value)
		return @sync.synchronize(::Sync::SH) {
			super
		}		
	end
	
	def delete_if(&block) 
		return @sync.synchronize(::Sync::SH) {
			super
		}				
	end
	
	def [](key)
		return @sync.synchronize(::Sync::SH) {
			super
		}
	end

	def []=(key, value)
		return @sync.synchronize(::Sync::EX) {
			super
		}
	end

	def delete(key)
		return @sync.synchronize(::Sync::EX) {
			super
		}
	end

	def clear
		@sync.synchronize(::Sync::EX) {
			super
		}
	end

	def size
		return @sync.synchronize(::Sync::SH) {
			super
		}
	end

	def shift
		return @sync.synchronize(::Sync::EX) {
			super
		}
	end

	def unshift(el)
		return @sync.synchronize(::Sync::EX) {
			super
		}
	end
		
end

end 

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
nitro-0.10.0 lib/glue/array.rb
og-0.10.0 lib/glue/array.rb