mbed I/F binding for mruby
Dependents: mruby_mbed_web mirb_mbed
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
Generated on Tue Jul 12 2022 18:00:34 by 1.7.2