require 'rubygems' require 'bud' class AtomicRegister include Bud state do table :write, [:wid] => [:name, :val] table :write_log, [:wid] => [:name, :val, :prev_wid] table :dom, [:wid] scratch :write_event, write.schema scratch :live, write_log.schema end bloom do write_event <= write.notin(write_log, :wid => :wid) write_log <+ (write_event * live).outer(:name => :name) do |e,l| e + [l.wid.nil? ? 0 : l.wid] end dom <= write_log {|l| [l.prev_wid]} live <= write_log.notin(dom, :wid => :wid) end end