Exemplo n.º 1
0
/*
 * Allocates memory for a new array
 * Note: Implementation almost exactly the same
 * as Ruby 1.9.2 p0 (have to copy because static)
 */
static VALUE my_ary_alloc (VALUE klass)
{
  NEWOBJ(ary, struct RArray);
  OBJSETUP((VALUE)ary, klass, T_ARRAY);
  FL_SET_EMBED((VALUE)ary);
  ARY_SET_EMBED_LEN((VALUE)ary, 0);

  return (VALUE)ary;
}
Exemplo n.º 2
0
Arquivo: array.c Projeto: iij/mruby
MRB_API mrb_value
mrb_ary_clear(mrb_state *mrb, mrb_value self)
{
  struct RArray *a = mrb_ary_ptr(self);

  ary_modify(mrb, a);
  if (ARY_SHARED_P(a)) {
    mrb_ary_decref(mrb, a->as.heap.aux.shared);
    ARY_UNSET_SHARED_FLAG(a);
  }
  else if (!ARY_EMBED_P(a)){
    mrb_free(mrb, a->as.heap.ptr);
  }
  ARY_SET_EMBED_LEN(a, 0);

  return self;
}
Exemplo n.º 3
0
Arquivo: array.c Projeto: iij/mruby
static struct RArray*
ary_new_capa(mrb_state *mrb, mrb_int capa)
{
  struct RArray *a;
  size_t blen;

  if (capa > ARY_MAX_SIZE) {
    mrb_raise(mrb, E_ARGUMENT_ERROR, "array size too big");
  }
  blen = capa * sizeof(mrb_value);

  a = (struct RArray*)mrb_obj_alloc(mrb, MRB_TT_ARRAY, mrb->array_class);
  if (capa <= MRB_ARY_EMBED_LEN_MAX) {
    ARY_SET_EMBED_LEN(a, 0);
  }
  else {
    a->as.heap.ptr = (mrb_value *)mrb_malloc(mrb, blen);
    a->as.heap.aux.capa = capa;
    a->as.heap.len = 0;
  }

  return a;
}