mbed I/F binding for mruby

Dependents:   mruby_mbed_web mirb_mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers array.h Source File

array.h

00001 /*
00002 ** mruby/array.h - Array class
00003 **
00004 ** See Copyright Notice in mruby.h
00005 */
00006 
00007 #ifndef MRUBY_ARRAY_H
00008 #define MRUBY_ARRAY_H
00009 
00010 #if defined(__cplusplus)
00011 extern "C" {
00012 #endif
00013 
00014 typedef struct mrb_shared_array {
00015   int refcnt;
00016   mrb_int len;
00017   mrb_value *ptr;
00018 } mrb_shared_array;
00019 
00020 struct RArray {
00021   MRB_OBJECT_HEADER;
00022   mrb_int len;
00023   union {
00024     mrb_int capa;
00025     mrb_shared_array *shared;
00026   } aux;
00027   mrb_value *ptr;
00028 };
00029 
00030 #define mrb_ary_ptr(v)    ((struct RArray*)(mrb_ptr(v)))
00031 #define mrb_ary_value(p)  mrb_obj_value((void*)(p))
00032 #define RARRAY(v)  ((struct RArray*)(mrb_ptr(v)))
00033 
00034 #define RARRAY_LEN(a) (RARRAY(a)->len)
00035 #define RARRAY_PTR(a) ((const mrb_value*)RARRAY(a)->ptr)
00036 #define MRB_ARY_SHARED      256
00037 #define ARY_SHARED_P(a) ((a)->flags & MRB_ARY_SHARED)
00038 #define ARY_SET_SHARED_FLAG(a) ((a)->flags |= MRB_ARY_SHARED)
00039 #define ARY_UNSET_SHARED_FLAG(a) ((a)->flags &= ~MRB_ARY_SHARED)
00040 
00041 void mrb_ary_decref(mrb_state*, mrb_shared_array*);
00042 MRB_API void mrb_ary_modify(mrb_state*, struct RArray*);
00043 MRB_API mrb_value mrb_ary_new_capa(mrb_state*, mrb_int);
00044 MRB_API mrb_value mrb_ary_new(mrb_state *mrb);
00045 MRB_API mrb_value mrb_ary_new_from_values(mrb_state *mrb, mrb_int size, const mrb_value *vals);
00046 MRB_API mrb_value mrb_assoc_new(mrb_state *mrb, mrb_value car, mrb_value cdr);
00047 MRB_API void mrb_ary_concat(mrb_state*, mrb_value, mrb_value);
00048 MRB_API mrb_value mrb_ary_splat(mrb_state*, mrb_value);
00049 MRB_API void mrb_ary_push(mrb_state*, mrb_value, mrb_value);
00050 MRB_API mrb_value mrb_ary_pop(mrb_state *mrb, mrb_value ary);
00051 MRB_API mrb_value mrb_ary_ref(mrb_state *mrb, mrb_value ary, mrb_int n);
00052 MRB_API void mrb_ary_set(mrb_state *mrb, mrb_value ary, mrb_int n, mrb_value val);
00053 MRB_API void mrb_ary_replace(mrb_state *mrb, mrb_value a, mrb_value b);
00054 MRB_API mrb_value mrb_check_array_type(mrb_state *mrb, mrb_value self);
00055 MRB_API mrb_value mrb_ary_unshift(mrb_state *mrb, mrb_value self, mrb_value item);
00056 MRB_API mrb_value mrb_ary_entry(mrb_value ary, mrb_int offset);
00057 MRB_API mrb_value mrb_ary_shift(mrb_state *mrb, mrb_value self);
00058 MRB_API mrb_value mrb_ary_clear(mrb_state *mrb, mrb_value self);
00059 MRB_API mrb_value mrb_ary_join(mrb_state *mrb, mrb_value ary, mrb_value sep);
00060 MRB_API mrb_value mrb_ary_resize(mrb_state *mrb, mrb_value ary, mrb_int len);
00061 
00062 static inline mrb_int
00063 mrb_ary_len(mrb_state *mrb, mrb_value ary)
00064 {
00065   (void)mrb;
00066   mrb_assert(mrb_array_p(ary));
00067   return RARRAY_LEN(ary);
00068 }
00069 
00070 #if defined(__cplusplus)
00071 }  /* extern "C" { */
00072 #endif
00073 
00074 #endif  /* MRUBY_ARRAY_H */
00075