60#if !defined(MRBC_KV_SIZE_INIT)
61#define MRBC_KV_SIZE_INIT 2
63#if !defined(MRBC_KV_SIZE_INCREMENT)
64#define MRBC_KV_SIZE_INCREMENT 5
85 if( right < 0 )
return -1;
87 while( left < right ) {
88 int mid = (left + right) / 2;
112 if( !kvh )
return NULL;
142 kvh->
data = mrbc_alloc(vm,
sizeof(
mrbc_kv) * size);
143 if( !kvh->
data )
return -1;
145#if defined(MRBC_DEBUG)
146 memcpy( kvh->
data->obj_mark_,
"KV", 2 );
181#if defined(MRBC_ALLOC_VMID)
194 mrbc_set_vm_id( p1, 0 );
197 mrbc_clear_vm_id(&p1->
value);
213 if( size <= 0 ) size = 1;
259#if defined(MRBC_DEBUG)
260 memcpy( kvh->
data->obj_mark_,
"KV", 2 );
271 if( idx < kvh->n_stored ) {
273 memmove( &kvh->
data[idx+1], &kvh->
data[idx], size );
295 if( idx < 0 )
return NULL;
296 if( kvh->
data[idx].
sym_id != sym_id )
return NULL;
319#if defined(MRBC_DEBUG)
320 memcpy( kvh->
data->obj_mark_,
"KV", 2 );
339static int compare_key(
const void *kv1,
const void *kv2 )
371 if( idx < 0 )
return 0;
372 if( kvh->
data[idx].
sym_id != sym_id )
return 0;
376 memmove( kvh->
data + idx, kvh->
data + idx + 1,
void * mrbc_raw_realloc(void *ptr, unsigned int size)
void mrbc_raw_free(void *ptr)
#define MRBC_KV_SIZE_INIT
void mrbc_kv_delete(mrbc_kv_handle *kvh)
int mrbc_kv_resize(mrbc_kv_handle *kvh, int size)
void mrbc_kv_dup(const mrbc_kv_handle *src, mrbc_kv_handle *dst)
static int binary_search(mrbc_kv_handle *kvh, mrbc_sym sym_id)
mrbc_kv_handle * mrbc_kv_new(struct VM *vm, int size)
int mrbc_kv_init_handle(struct VM *vm, mrbc_kv_handle *kvh, int size)
void mrbc_kv_delete_data(mrbc_kv_handle *kvh)
#define MRBC_KV_SIZE_INCREMENT
void mrbc_kv_clear(mrbc_kv_handle *kvh)
int mrbc_kv_remove(mrbc_kv_handle *kvh, mrbc_sym sym_id)
mrbc_value * mrbc_kv_get(mrbc_kv_handle *kvh, mrbc_sym sym_id)
int mrbc_kv_set(mrbc_kv_handle *kvh, mrbc_sym sym_id, mrbc_value *set_val)
static mrbc_kv * mrbc_kv_i_next(mrbc_kv_iterator *ite)
struct RKeyValueHandle mrbc_kv_handle
Key-Value handle.
static int mrbc_kv_i_has_next(const mrbc_kv_iterator *ite)
struct RKeyValue mrbc_kv
Key-Value data.
struct RKeyValueIterator mrbc_kv_iterator
Key-Value iterator.
static mrbc_kv_iterator mrbc_kv_iterator_new(const mrbc_kv_handle *h)
Include at once the necessary header files.
uint16_t n_stored
num of stored.
struct VM * vm
pointer to VM (if data_size == 0)
mrbc_kv * data
pointer to allocated memory.
uint16_t data_size
data buffer size.
mrbc_sym sym_id
symbol ID as key.
mrbc_value value
stored value.
static void mrbc_decref(mrbc_value *v)
static void mrbc_incref(mrbc_value *v)
int16_t mrbc_sym
mruby/c symbol ID
struct RObject mrbc_value
Global configuration of mruby/c VM's.