Пример #1
0
/* 
 *  call-seq:
 *     lmc.get(key)   ->   string value or nil
 *     lmc[key]       ->   string value or nil
 *
 *  Retrieve string value from hashtable.
 */
static VALUE LocalMemCache__get(VALUE obj, VALUE key) {
  size_t l;
  lmc_rb_str_d_t k;
  rstring_acquire(key, &k);
  const char* r = __local_memcache_get(get_LocalMemCache(obj), 
      k.cstr, k.len, &l);
  VALUE rr = lmc_ruby_string2(r, l);
  lmc_unlock_shm_region("local_memcache_get", get_LocalMemCache(obj));
  return rr;
}
Пример #2
0
/* 
 *  call-seq:
 *     lmc.each_pair {|k, v|  block } -> nil
 *
 *  Iterates over hashtable.
 */
static VALUE LocalMemCache__each_pair(VALUE obj) {
  VALUE d = rb_ary_new();
  rb_ary_push(d, obj);
  int error = 0;
  rb_protect(__LocalMemCache__each_pair, d, &error);
  if (error) {
    lmc_unlock_shm_region("local_memcache_iterate", get_LocalMemCache(obj));
    rb_exc_raise(ruby_errinfo);
  }
  return Qnil;
}
/*
 *  call-seq:
 *     lmc.get(key)   ->   string value or nil
 *     lmc[key]       ->   string value or nil
 *
 *  Retrieve string value from hashtable.
 */
static mrb_value Cache__get(mrb_state *mrb, mrb_value self)
{
  local_memcache_t *lmc = get_Cache(mrb, self);
  size_t l;
  char *key;
  mrb_int n_key;

  mrb_get_args(mrb, "s", &key, &n_key);
  const char *r = __local_memcache_get(lmc, key, n_key, &l);
  mrb_value rr = lmc_ruby_string2(mrb, r, l);
  lmc_unlock_shm_region("local_memcache_get", lmc);
  return rr;
}
Пример #4
0
/* 
 *  call-seq:
 *     lmc.random_pair()   ->  [key, value] or nil
 *
 *  Retrieves random pair from hashtable.
 */
static VALUE LocalMemCache__random_pair(VALUE obj) {
  char *k, *v;
  size_t n_k, n_v;
  VALUE r = Qnil;
  if (__local_memcache_random_pair(get_LocalMemCache(obj), &k, &n_k, &v, 
      &n_v)) {
    r = rb_ary_new();
    rb_ary_push(r, lmc_ruby_string2(k, n_k));
    rb_ary_push(r, lmc_ruby_string2(v, n_v));
  }
  lmc_unlock_shm_region("local_memcache_random_pair", 
      get_LocalMemCache(obj));
  return r;
}
static mrb_value Cache__shm_status(mrb_state *mrb, mrb_value self)
{
  mrb_value hash = mrb_hash_new(mrb);

  local_memcache_t *lmc = get_Cache(mrb, self);
  if (!lmc_lock_shm_region("shm_status", lmc))
    return mrb_nil_value();
  lmc_mem_status_t ms = lmc_status(lmc->base, "shm_status");
  if (!lmc_unlock_shm_region("shm_status", lmc))
    return mrb_nil_value();

  mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_cstr(mrb, "free_bytes")), mrb_fixnum_value(ms.total_free_mem));
  mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_cstr(mrb, "total_bytes")), mrb_fixnum_value(ms.total_shm_size));
  mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_cstr(mrb, "used_bytes")),
               mrb_fixnum_value(ms.total_shm_size - ms.total_free_mem));
  mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_cstr(mrb, "free_chunks")), mrb_fixnum_value(ms.free_chunks));
  mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_cstr(mrb, "largest_chunk")), mrb_fixnum_value(ms.largest_chunk));
  return hash;
}
Пример #6
0
/* 
 *  call-seq:
 *     lmc.shm_status -> hash
 *
 *  Some status information on the shared memory:
 *
 *    :total_bytes # the total size of the shm in bytes 
 *    :used_bytes  # how many bytes are used in this shm 
 *                 # For exmpty namespaces this will reflect the amount
 *                 # of memory used for the hash buckets and some other 
 *                 # administrative data structures.
 *    :free_bytes  # how many bytes are free 
 */
static VALUE LocalMemCache__shm_status(VALUE obj) {
  VALUE hash = rb_hash_new();
  
  local_memcache_t *lmc = get_LocalMemCache(obj);
  if (!lmc_lock_shm_region("shm_status", lmc)) return Qnil;
  lmc_mem_status_t ms = lmc_status(lmc->base, "shm_status");
  if (!lmc_unlock_shm_region("shm_status", lmc)) return Qnil;

  rb_hash_aset(hash, ID2SYM(rb_intern("free_bytes")), 
      rb_int2big(ms.total_free_mem));
  rb_hash_aset(hash, ID2SYM(rb_intern("total_bytes")), 
      rb_int2big(ms.total_shm_size));
  rb_hash_aset(hash, ID2SYM(rb_intern("used_bytes")), rb_int2big(
      ms.total_shm_size - ms.total_free_mem));
  rb_hash_aset(hash, ID2SYM(rb_intern("free_chunks")), rb_int2big(
      ms.free_chunks));
  rb_hash_aset(hash, ID2SYM(rb_intern("largest_chunk")), rb_int2big(
      ms.largest_chunk));
  return hash;
}