mruby/c VM Source Code release 4.0.0
Loading...
Searching...
No Matches
keyvalue.h
Go to the documentation of this file.
1
14
15#ifndef MRBC_SRC_C_KEYVALUE_H_
16#define MRBC_SRC_C_KEYVALUE_H_
17
18/***** Feature test switches ************************************************/
19/***** System headers *******************************************************/
20//@cond
21#include "vm_config.h"
22#include <stdint.h>
23//@endcond
24
25/***** Local headers ********************************************************/
26#include "value.h"
27
28#ifdef __cplusplus
29extern "C" {
30#endif
31
32
33/***** Constant values ******************************************************/
34/***** Typedefs *************************************************************/
35//================================================================
39typedef struct RKeyValue {
40#if defined(MRBC_DEBUG)
41 char obj_mark_[2];
42#endif
45
47
48
49//================================================================
53typedef struct RKeyValueHandle {
54 uint16_t data_size;
55 uint16_t n_stored;
56 union {
58 struct VM *vm;
59 };
60
62
63#define MRBC_KVH_INITIALIZER(vm) (mrbc_kv_handle){ \
64 .data_size = 0, \
65 .n_stored = 0, \
66 .vm = vm, \
67}
68
69
70//================================================================
74typedef struct RKeyValueIterator {
76 uint16_t i;
77
79
80
81/***** Macros ***************************************************************/
82/***** Global variables *****************************************************/
83/***** Function prototypes **************************************************/
84//@cond
85mrbc_kv_handle *mrbc_kv_new(struct VM *vm, int size);
86int mrbc_kv_init_handle(struct VM *vm, mrbc_kv_handle *kvh, int size);
89void mrbc_kv_clear_vm_id(mrbc_kv_handle *kvh);
90int mrbc_kv_resize(mrbc_kv_handle *kvh, int size);
91int mrbc_kv_set(mrbc_kv_handle *kvh, mrbc_sym sym_id, mrbc_value *set_val);
93int mrbc_kv_append(mrbc_kv_handle *kvh, mrbc_sym sym_id, mrbc_value *set_val);
94int mrbc_kv_reorder(mrbc_kv_handle *kvh);
95int mrbc_kv_remove(mrbc_kv_handle *kvh, mrbc_sym sym_id);
97void mrbc_kv_dup(const mrbc_kv_handle *src, mrbc_kv_handle *dst);
98//@endcond
99
100
101/***** Inline functions *****************************************************/
102//================================================================
105static inline int mrbc_kv_size(const mrbc_kv_handle *kvh)
106{
107 return kvh->n_stored;
108}
109
110//================================================================
123{
125
126 ite.target = h;
127 ite.i = 0;
128
129 return ite;
130}
131
132//================================================================
135static inline int mrbc_kv_i_is_first( const mrbc_kv_iterator *ite )
136{
137 return ite->i == 0;
138}
139
140//================================================================
143static inline int mrbc_kv_i_has_next( const mrbc_kv_iterator *ite )
144{
145 return ite->i < ite->target->n_stored;
146}
147
148//================================================================
152{
153 return &ite->target->data[ ite->i ];
154}
155
156//================================================================
160{
161 return &ite->target->data[ ite->i++ ];
162}
163
164
165#ifdef __cplusplus
166}
167#endif
168#endif
struct RObject mrbc_value
Value object. Default version.
void mrbc_kv_delete(mrbc_kv_handle *kvh)
Definition keyvalue.c:155
int mrbc_kv_resize(mrbc_kv_handle *kvh, int size)
Definition keyvalue.c:207
void mrbc_kv_dup(const mrbc_kv_handle *src, mrbc_kv_handle *dst)
Definition keyvalue.c:397
mrbc_kv_handle * mrbc_kv_new(struct VM *vm, int size)
Definition keyvalue.c:110
int mrbc_kv_init_handle(struct VM *vm, mrbc_kv_handle *kvh, int size)
Definition keyvalue.c:128
void mrbc_kv_delete_data(mrbc_kv_handle *kvh)
Definition keyvalue.c:167
void mrbc_kv_clear(mrbc_kv_handle *kvh)
Definition keyvalue.c:378
int mrbc_kv_remove(mrbc_kv_handle *kvh, mrbc_sym sym_id)
Definition keyvalue.c:357
mrbc_value * mrbc_kv_get(mrbc_kv_handle *kvh, mrbc_sym sym_id)
Definition keyvalue.c:284
int mrbc_kv_set(mrbc_kv_handle *kvh, mrbc_sym sym_id, mrbc_value *set_val)
Definition keyvalue.c:228
static mrbc_kv * mrbc_kv_i_get(mrbc_kv_iterator *ite)
Definition keyvalue.h:151
static mrbc_kv * mrbc_kv_i_next(mrbc_kv_iterator *ite)
Definition keyvalue.h:159
struct RKeyValueHandle mrbc_kv_handle
Key-Value handle.
static int mrbc_kv_i_has_next(const mrbc_kv_iterator *ite)
Definition keyvalue.h:143
struct RKeyValue mrbc_kv
Key-Value data.
static int mrbc_kv_size(const mrbc_kv_handle *kvh)
Definition keyvalue.h:105
static int mrbc_kv_i_is_first(const mrbc_kv_iterator *ite)
Definition keyvalue.h:135
struct RKeyValueIterator mrbc_kv_iterator
Key-Value iterator.
static mrbc_kv_iterator mrbc_kv_iterator_new(const mrbc_kv_handle *h)
Definition keyvalue.h:122
Key-Value handle.
Definition keyvalue.h:53
uint16_t n_stored
num of stored.
Definition keyvalue.h:55
struct VM * vm
pointer to VM (if data_size == 0)
Definition keyvalue.h:58
mrbc_kv * data
pointer to allocated memory.
Definition keyvalue.h:57
uint16_t data_size
data buffer size.
Definition keyvalue.h:54
Key-Value data.
Definition keyvalue.h:39
mrbc_sym sym_id
symbol ID as key.
Definition keyvalue.h:43
mrbc_value value
stored value.
Definition keyvalue.h:44
Key-Value iterator.
Definition keyvalue.h:74
const mrbc_kv_handle * target
Definition keyvalue.h:75
Virtual Machine.
Definition vm.h:150
mruby/c value definitions
int16_t mrbc_sym
mruby/c symbol ID
Definition value.h:62
Global configuration of mruby/c VM's.