class Ccp::Kvs::Kyoto::Cabinet

Public Class Methods

new(source) click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 7
def initialize(source)
  @source = source
  @db     = DB.new
end

Public Instance Methods

clear() click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 80
def clear
  tryW("clear")
  @db.clear or kyoto_error!("clear: ")
end
count() click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 53
def count
  tryR("count")
  return @db.count
end
del(k) click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 34
def del(k)
  tryW("del")
  v = @db[k.to_s]
  if v
    if @db.delete(k.to_s)
      return decode(v)
    else
      kyoto_error!("del(%s): " % k)
    end
  else
    return nil
  end
end
each(&block) click to toggle source

iterator

# File lib/ccp/kvs/kyoto/cabinet.rb, line 88
def each(&block)
  each_pair(&block)
end
each_key(&block) click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 103
def each_key(&block)
  tryR("each_key")

  # TODO: Waste memory! But kc ignores exceptions in his each block.
  array = []
  @db.each_key{|k| array << k.first} or kyoto_error!("each_key: ")
  array.each do |k|
    block.call(k)
  end
end
each_pair(&block) click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 92
def each_pair(&block)
  tryR("each_pair")

  # TODO: Waste memory! But kc ignores exceptions in his each block.
  array = []
  @db.each{|k, v| array << [k, decode(v)]} or kyoto_error!("each_pair: ")
  array.each do |a|
    block.call(a[0], a[1])
  end
end
exist?(k) click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 48
def exist?(k)
  tryR("exist?")
  return !! @db[k.to_s] # TODO: fast access
end
first() click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 128
def first
  tryR("first")
  @db.cursor_process {|cur|
    cur.jump
    k, v = cur.get(true)
    return [k, decode(v)]
  }
end
first_key() click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 124
def first_key
  first.first
end
get(k) click to toggle source

kvs

# File lib/ccp/kvs/kyoto/cabinet.rb, line 15
def get(k)
  tryR("get")
  v = @db[k.to_s]
  if v
    return decode(v)
  else
    # tc, kc is not safe for file deletion or unexpected stuffs
    # if @db.error.is_a?(KyotoCabinet::Error::XNOREC)
    return nil
  end
end
keys() click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 114
def keys
  tryR("keys")

  array = []
  each_key do |key|
    array << key
  end
  return array
end
read() click to toggle source

bulk operations (not DRY but fast)

# File lib/ccp/kvs/kyoto/cabinet.rb, line 61
def read
  tryR("read")
  hash = {}
  @db.each do |k, v|
    v or kyoto_error!("each(%s): " % k)
    hash[k] = decode(v)
  end
  return hash
end
set(k,v) click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 27
def set(k,v)
  tryW("set")
  val = encode(v)
  @db.set(k.to_s, val) or
    kyoto_error!("set(%s): " % k)
end
write(h) click to toggle source
# File lib/ccp/kvs/kyoto/cabinet.rb, line 71
def write(h)
  tryW("write")
  h.each_pair do |k,v|
    val = encode(v)
    @db[k.to_s] = val or kyoto_error!("write(%s): " % k)
  end
  return h
end