# A concurrent variant to the standard `Array`
class ConcurrentArray[E]
super ConcurrentSequence[E]
super Array[E]
redef type REAL: Array[E]
init wrap(real_collection: REAL) do self.real_collection = real_collection
init do self.real_collection = new Array[E]
redef fun clear
do
mutex.lock
real_collection.clear
mutex.unlock
end
redef fun enlarge(cap)
do
mutex.lock
real_collection.enlarge(cap)
mutex.unlock
end
redef fun remove_all(e)
do
mutex.lock
real_collection.remove_all(e)
mutex.unlock
end
redef fun swap_at(a, b)
do
mutex.lock
real_collection.swap_at(a, b)
mutex.unlock
end
redef fun has(e)
do
mutex.lock
var result = real_collection.has(e)
mutex.unlock
return result
end
#
## The following method defs are conflict resolutions
#
redef fun add(e)
do
mutex.lock
real_collection.add e
mutex.unlock
end
redef fun length
do
mutex.lock
var r = real_collection.length
mutex.unlock
return r
end
end
lib/pthreads/concurrent_collections.nit:386,1--450,3