Class: VolatileMap
- Inherits:
-
Object
- Object
- VolatileMap
- Defined in:
- lib/volatile_map/version.rb,
ext/volatile_map/volatile_map.c
Constant Summary collapse
- VERSION =
"0.2.0"
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
- #delete(key) ⇒ Object
- #has_key?(key) ⇒ Boolean
- #include?(key) ⇒ Boolean
- #initialize(ttl) ⇒ Object constructor
- #key?(key) ⇒ Boolean
- #length ⇒ Object
- #member?(key) ⇒ Boolean
- #size ⇒ Object
- #ttl ⇒ Object
Constructor Details
#initialize(ttl) ⇒ Object
145 146 147 148 149 150 151 152 153 154 |
# File 'ext/volatile_map/volatile_map.c', line 145
static VALUE vm_initialize(VALUE self, VALUE ttl) {
VolatileMap *vm = vm_get(self);
double ttl_value = NUM2DBL(ttl);
if(ttl_value <= 0.0) rb_raise(rb_eArgError, "TTL must be positive");
vm->ttl = ttl_value;
return self;
}
|
Instance Method Details
#[](key) ⇒ Object
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'ext/volatile_map/volatile_map.c', line 169
static VALUE vm_aref(VALUE self, VALUE key) {
VolatileMap *vm = vm_get(self);
VALUE entry = rb_hash_lookup2(vm->storage, key, Qundef);
if(entry == Qundef) return Qnil;
double now = now_seconds();
if(is_stale(vm->ttl, entry, now)) {
rb_hash_delete(vm->storage, key);
return Qnil;
}
rb_ary_store(entry, 1, DBL2NUM(now));
return RARRAY_AREF(entry, 0);
}
|
#[]=(key, value) ⇒ Object
160 161 162 163 164 165 166 167 |
# File 'ext/volatile_map/volatile_map.c', line 160
static VALUE vm_aset(VALUE self, VALUE key, VALUE value) {
VolatileMap *vm = vm_get(self);
VALUE entry = rb_ary_new_from_args(2, value, DBL2NUM(now_seconds()));
rb_hash_aset(vm->storage, key, entry);
return value;
}
|
#delete(key) ⇒ Object
188 189 190 191 192 193 194 195 |
# File 'ext/volatile_map/volatile_map.c', line 188
static VALUE vm_delete(VALUE self, VALUE key) {
VolatileMap *vm = vm_get(self);
VALUE entry = rb_hash_delete(vm->storage, key);
if(NIL_P(entry) || !RB_TYPE_P(entry, T_ARRAY) || RARRAY_LEN(entry) < 1) return Qnil;
return RARRAY_AREF(entry, 0);
}
|
#has_key?(key) ⇒ Boolean
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'ext/volatile_map/volatile_map.c', line 205
static VALUE vm_key(VALUE self, VALUE key) {
VolatileMap *vm = vm_get(self);
VALUE entry = rb_hash_lookup2(vm->storage, key, Qundef);
if(entry == Qundef) return Qfalse;
double now = now_seconds();
if(is_stale(vm->ttl, entry, now)) {
rb_hash_delete(vm->storage, key);
return Qfalse;
}
rb_ary_store(entry, 1, DBL2NUM(now));
return Qtrue;
}
|
#include?(key) ⇒ Boolean
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'ext/volatile_map/volatile_map.c', line 205
static VALUE vm_key(VALUE self, VALUE key) {
VolatileMap *vm = vm_get(self);
VALUE entry = rb_hash_lookup2(vm->storage, key, Qundef);
if(entry == Qundef) return Qfalse;
double now = now_seconds();
if(is_stale(vm->ttl, entry, now)) {
rb_hash_delete(vm->storage, key);
return Qfalse;
}
rb_ary_store(entry, 1, DBL2NUM(now));
return Qtrue;
}
|
#key?(key) ⇒ Boolean
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'ext/volatile_map/volatile_map.c', line 205
static VALUE vm_key(VALUE self, VALUE key) {
VolatileMap *vm = vm_get(self);
VALUE entry = rb_hash_lookup2(vm->storage, key, Qundef);
if(entry == Qundef) return Qfalse;
double now = now_seconds();
if(is_stale(vm->ttl, entry, now)) {
rb_hash_delete(vm->storage, key);
return Qfalse;
}
rb_ary_store(entry, 1, DBL2NUM(now));
return Qtrue;
}
|
#length ⇒ Object
197 198 199 200 201 202 203 |
# File 'ext/volatile_map/volatile_map.c', line 197
static VALUE vm_size(VALUE self) {
VolatileMap *vm = vm_get(self);
if(NIL_P(vm->storage)) return INT2FIX(0);
return ULONG2NUM(RHASH_SIZE(vm->storage));
}
|
#member?(key) ⇒ Boolean
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'ext/volatile_map/volatile_map.c', line 205
static VALUE vm_key(VALUE self, VALUE key) {
VolatileMap *vm = vm_get(self);
VALUE entry = rb_hash_lookup2(vm->storage, key, Qundef);
if(entry == Qundef) return Qfalse;
double now = now_seconds();
if(is_stale(vm->ttl, entry, now)) {
rb_hash_delete(vm->storage, key);
return Qfalse;
}
rb_ary_store(entry, 1, DBL2NUM(now));
return Qtrue;
}
|
#size ⇒ Object
197 198 199 200 201 202 203 |
# File 'ext/volatile_map/volatile_map.c', line 197
static VALUE vm_size(VALUE self) {
VolatileMap *vm = vm_get(self);
if(NIL_P(vm->storage)) return INT2FIX(0);
return ULONG2NUM(RHASH_SIZE(vm->storage));
}
|
#ttl ⇒ Object
156 157 158 |
# File 'ext/volatile_map/volatile_map.c', line 156
static VALUE vm_ttl(VALUE self) {
return DBL2NUM(vm_get(self)->ttl);
}
|