mruby/c VM Source Code release 3.4
Loading...
Searching...
No Matches
keyvalue.h
Go to the documentation of this file.
1
13
14#ifndef MRBC_SRC_C_KEYVALUE_H_
15#define MRBC_SRC_C_KEYVALUE_H_
16
17/***** Feature test switches ************************************************/
18/***** System headers *******************************************************/
19//@cond
20#include "vm_config.h"
21#include <stdint.h>
22//@endcond
23
24/***** Local headers ********************************************************/
25#include "value.h"
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31
32/***** Constant values ******************************************************/
33/***** Typedefs *************************************************************/
34//================================================================
38typedef struct RKeyValue {
39#if defined(MRBC_DEBUG)
40 char obj_mark_[2];
41#endif
44
46
47
48//================================================================
52typedef struct RKeyValueHandle {
53 uint16_t data_size;
54 uint16_t n_stored;
55 union {
57 struct VM *vm;
58 };
59
61
62
63//================================================================
67typedef struct RKeyValueIterator {
69 uint16_t i;
70
72
73
74/***** Macros ***************************************************************/
75/***** Global variables *****************************************************/
76/***** Function prototypes **************************************************/
77//@cond
78mrbc_kv_handle *mrbc_kv_new(struct VM *vm, int size);
79int mrbc_kv_init_handle(struct VM *vm, mrbc_kv_handle *kvh, int size);
82void mrbc_kv_clear_vm_id(mrbc_kv_handle *kvh);
83int mrbc_kv_resize(mrbc_kv_handle *kvh, int size);
84int mrbc_kv_set(mrbc_kv_handle *kvh, mrbc_sym sym_id, mrbc_value *set_val);
86int mrbc_kv_append(mrbc_kv_handle *kvh, mrbc_sym sym_id, mrbc_value *set_val);
87int mrbc_kv_reorder(mrbc_kv_handle *kvh);
88int mrbc_kv_remove(mrbc_kv_handle *kvh, mrbc_sym sym_id);
90void mrbc_kv_dup(const mrbc_kv_handle *src, mrbc_kv_handle *dst);
91//@endcond
92
93
94/***** Inline functions *****************************************************/
95//================================================================
98static inline int mrbc_kv_size(const mrbc_kv_handle *kvh)
99{
100 return kvh->n_stored;
101}
102
103//================================================================
116{
118
119 ite.target = h;
120 ite.i = 0;
121
122 return ite;
123}
124
125//================================================================
128static inline int mrbc_kv_i_is_first( const mrbc_kv_iterator *ite )
129{
130 return ite->i == 0;
131}
132
133//================================================================
136static inline int mrbc_kv_i_has_next( const mrbc_kv_iterator *ite )
137{
138 return ite->i < ite->target->n_stored;
139}
140
141//================================================================
145{
146 return &ite->target->data[ ite->i ];
147}
148
149//================================================================
153{
154 return &ite->target->data[ ite->i++ ];
155}
156
157
158#ifdef __cplusplus
159}
160#endif
161#endif
void mrbc_kv_delete(mrbc_kv_handle *kvh)
Definition keyvalue.c:159
int mrbc_kv_resize(mrbc_kv_handle *kvh, int size)
Definition keyvalue.c:211
void mrbc_kv_dup(const mrbc_kv_handle *src, mrbc_kv_handle *dst)
Definition keyvalue.c:408
mrbc_kv_handle * mrbc_kv_new(struct VM *vm, int size)
Definition keyvalue.c:109
int mrbc_kv_init_handle(struct VM *vm, mrbc_kv_handle *kvh, int size)
Definition keyvalue.c:131
void mrbc_kv_delete_data(mrbc_kv_handle *kvh)
Definition keyvalue.c:171
void mrbc_kv_clear(mrbc_kv_handle *kvh)
Definition keyvalue.c:389
int mrbc_kv_remove(mrbc_kv_handle *kvh, mrbc_sym sym_id)
Definition keyvalue.c:368
mrbc_value * mrbc_kv_get(mrbc_kv_handle *kvh, mrbc_sym sym_id)
Definition keyvalue.c:292
int mrbc_kv_set(mrbc_kv_handle *kvh, mrbc_sym sym_id, mrbc_value *set_val)
Definition keyvalue.c:233
static mrbc_kv * mrbc_kv_i_get(mrbc_kv_iterator *ite)
Definition keyvalue.h:144
static mrbc_kv * mrbc_kv_i_next(mrbc_kv_iterator *ite)
Definition keyvalue.h:152
struct RKeyValueHandle mrbc_kv_handle
Key-Value handle.
static int mrbc_kv_i_has_next(const mrbc_kv_iterator *ite)
Definition keyvalue.h:136
struct RKeyValue mrbc_kv
Key-Value data.
static int mrbc_kv_size(const mrbc_kv_handle *kvh)
Definition keyvalue.h:98
static int mrbc_kv_i_is_first(const mrbc_kv_iterator *ite)
Definition keyvalue.h:128
struct RKeyValueIterator mrbc_kv_iterator
Key-Value iterator.
static mrbc_kv_iterator mrbc_kv_iterator_new(const mrbc_kv_handle *h)
Definition keyvalue.h:115
Key-Value handle.
Definition keyvalue.h:52
uint16_t n_stored
num of stored.
Definition keyvalue.h:54
struct VM * vm
pointer to VM (if data_size == 0)
Definition keyvalue.h:57
mrbc_kv * data
pointer to allocated memory.
Definition keyvalue.h:56
uint16_t data_size
data buffer size.
Definition keyvalue.h:53
Key-Value data.
Definition keyvalue.h:38
mrbc_sym sym_id
symbol ID as key.
Definition keyvalue.h:42
mrbc_value value
stored value.
Definition keyvalue.h:43
Key-Value iterator.
Definition keyvalue.h:67
const mrbc_kv_handle * target
Definition keyvalue.h:68
Virtual Machine.
Definition vm.h:140
mruby/c value definitions
int16_t mrbc_sym
mruby/c symbol ID
Definition value.h:59
struct RObject mrbc_value
Definition value.h:174
Global configuration of mruby/c VM's.