Sha256: a06fb6650ef29a13ac0566d9021dfe71bce30af1a1ba1844544745ea6a858259

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

# * George Moschovitis  <gm@navel.gr>
# (c) 2002-2005 Navel, all rights reserved.
# $Id: array.rb 182 2005-07-22 10:07:50Z gmosx $

require 'sync'

module Glue

# 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

3 entries across 3 versions & 1 rubygems

Version Path
glue-0.21.2 lib/glue/array.rb
glue-0.21.0 lib/glue/array.rb
glue-0.22.0 lib/glue/array.rb