Class: VolatileMap
- Inherits:
-
Object
- Object
- VolatileMap
- Defined in:
- lib/volatile_map/version.rb,
ext/volatile_map/volatile_map.c
Constant Summary collapse
- VERSION =
"0.1.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
147 148 149 150 151 152 153 154 155 156 |
# File 'ext/volatile_map/volatile_map.c', line 147
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
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'ext/volatile_map/volatile_map.c', line 171
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
162 163 164 165 166 167 168 169 |
# File 'ext/volatile_map/volatile_map.c', line 162
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
190 191 192 193 194 195 196 197 |
# File 'ext/volatile_map/volatile_map.c', line 190
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
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'ext/volatile_map/volatile_map.c', line 207
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
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'ext/volatile_map/volatile_map.c', line 207
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
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'ext/volatile_map/volatile_map.c', line 207
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
199 200 201 202 203 204 205 |
# File 'ext/volatile_map/volatile_map.c', line 199
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
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'ext/volatile_map/volatile_map.c', line 207
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
199 200 201 202 203 204 205 |
# File 'ext/volatile_map/volatile_map.c', line 199
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
158 159 160 |
# File 'ext/volatile_map/volatile_map.c', line 158
static VALUE vm_ttl(VALUE self) {
return DBL2NUM(vm_get(self)->ttl);
}
|