Skip to content

Instantly share code, notes, and snippets.

@seki
Last active August 29, 2015 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seki/5b2163bec0c42005a6a0 to your computer and use it in GitHub Desktop.
Save seki/5b2163bec0c42005a6a0 to your computer and use it in GitHub Desktop.
YA SizedQueue, uses pattern [key, Range, Array].
class ChannelSpace
class ChannelHandle
def initialize(ts, size)
@ts = ts
@size = size
@name = Object.new
@ts.write([@name, 0, []])
end
def write(value)
_, _, ary = @ts.take([@name, 0...@size, nil])
ary.push(value)
value
ensure
@ts.write([@name, ary.size, ary])
end
def read
_, _, ary = @ts.take([@name, 1..@size, nil])
ary.shift
ensure
@ts.write([@name, ary.size, ary])
end
end
def initialize
@ts = Rinda::TupleSpace.new
end
def open(size)
ChannelHandle.new(@ts, size)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment