mruby  2.0.1
mruby is the lightweight implementation of the Ruby language
Classes | Macros | Typedefs | Functions
array.h File Reference

More...

#include "common.h"
Include dependency graph for array.h:

Go to the source code of this file.

Classes

struct  mrb_shared_array
 
struct  RArray
 

Macros

#define MRB_ARY_EMBED_LEN_MAX   ((mrb_int)(sizeof(void*)*3/sizeof(mrb_value)))
 
#define mrb_ary_ptr(v)   ((struct RArray*)(mrb_ptr(v)))
 
#define mrb_ary_value(p)   mrb_obj_value((void*)(p))
 
#define RARRAY(v)   ((struct RArray*)(mrb_ptr(v)))
 
#define MRB_ARY_EMBED_MASK   7
 
#define ARY_EMBED_P(a)   ((a)->flags & MRB_ARY_EMBED_MASK)
 
#define ARY_UNSET_EMBED_FLAG(a)   ((a)->flags &= ~(MRB_ARY_EMBED_MASK))
 
#define ARY_EMBED_LEN(a)   ((mrb_int)(((a)->flags & MRB_ARY_EMBED_MASK) - 1))
 
#define ARY_SET_EMBED_LEN(a, len)   ((a)->flags = ((a)->flags&~MRB_ARY_EMBED_MASK) | ((uint32_t)(len) + 1))
 
#define ARY_EMBED_PTR(a)   ((mrb_value*)(&(a)->as.ary))
 
#define ARY_LEN(a)   (ARY_EMBED_P(a)?ARY_EMBED_LEN(a):(a)->as.heap.len)
 
#define ARY_PTR(a)   (ARY_EMBED_P(a)?ARY_EMBED_PTR(a):(a)->as.heap.ptr)
 
#define RARRAY_LEN(a)   ARY_LEN(RARRAY(a))
 
#define RARRAY_PTR(a)   ARY_PTR(RARRAY(a))
 
#define ARY_SET_LEN(a, n)
 
#define ARY_CAPA(a)   (ARY_EMBED_P(a)?MRB_ARY_EMBED_LEN_MAX:(a)->as.heap.aux.capa)
 
#define MRB_ARY_SHARED   256
 
#define ARY_SHARED_P(a)   ((a)->flags & MRB_ARY_SHARED)
 
#define ARY_SET_SHARED_FLAG(a)   ((a)->flags |= MRB_ARY_SHARED)
 
#define ARY_UNSET_SHARED_FLAG(a)   ((a)->flags &= ~MRB_ARY_SHARED)
 

Typedefs

typedef struct mrb_shared_array mrb_shared_array
 

Functions

void mrb_ary_decref (mrb_state *, mrb_shared_array *)
 
void mrb_ary_modify (mrb_state *, struct RArray *)
 
mrb_value mrb_ary_new_capa (mrb_state *, mrb_int)
 
mrb_value mrb_ary_new (mrb_state *mrb)
 
mrb_value mrb_ary_new_from_values (mrb_state *mrb, mrb_int size, const mrb_value *vals)
 
mrb_value mrb_assoc_new (mrb_state *mrb, mrb_value car, mrb_value cdr)
 
void mrb_ary_concat (mrb_state *mrb, mrb_value self, mrb_value other)
 
mrb_value mrb_ary_splat (mrb_state *mrb, mrb_value value)
 
void mrb_ary_push (mrb_state *mrb, mrb_value array, mrb_value value)
 
mrb_value mrb_ary_pop (mrb_state *mrb, mrb_value ary)
 
mrb_value mrb_ary_ref (mrb_state *mrb, mrb_value ary, mrb_int n)
 
void mrb_ary_set (mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val)
 
void mrb_ary_replace (mrb_state *mrb, mrb_value self, mrb_value other)
 
mrb_value mrb_ensure_array_type (mrb_state *mrb, mrb_value self)
 
mrb_value mrb_check_array_type (mrb_state *mrb, mrb_value self)
 
mrb_value mrb_ary_unshift (mrb_state *mrb, mrb_value self, mrb_value item)
 
mrb_value mrb_ary_entry (mrb_value ary, mrb_int offset)
 
mrb_value mrb_ary_splice (mrb_state *mrb, mrb_value self, mrb_int head, mrb_int len, mrb_value rpl)
 
mrb_value mrb_ary_shift (mrb_state *mrb, mrb_value self)
 
mrb_value mrb_ary_clear (mrb_state *mrb, mrb_value self)
 
mrb_value mrb_ary_join (mrb_state *mrb, mrb_value ary, mrb_value sep)
 
mrb_value mrb_ary_resize (mrb_state *mrb, mrb_value ary, mrb_int new_len)
 

Detailed Description

See Copyright Notice in mruby.h

Macro Definition Documentation

◆ ARY_SET_LEN

#define ARY_SET_LEN (   a,
 
)
Value:
do {\
if (ARY_EMBED_P(a)) {\
mrb_assert((n) <= MRB_ARY_EMBED_LEN_MAX); \
ARY_SET_EMBED_LEN(a,n);\
}\
else\
(a)->as.heap.len = (n);\
} while (0)