VALUE na_inplace_store( VALUE self, VALUE val ) { if (self==val) return self; else return na_store( self, val ); }
static void na_parse_narray_index(VALUE a, int orig_dim, ssize_t size, na_index_arg_t *q) { VALUE idx; narray_t *na; narray_data_t *nidx; size_t k, n; ssize_t *nidxp; GetNArray(a,na); if (NA_NDIM(na) != 1) { rb_raise(rb_eIndexError, "should be 1-d NArray"); } n = NA_SIZE(na); idx = nary_new(cIndex,1,&n); na_store(idx,a); GetNArrayData(idx,nidx); nidxp = (ssize_t*)nidx->ptr; q->idx = ALLOC_N(size_t, n); for (k=0; k<n; k++) { q->idx[k] = na_range_check(nidxp[k], size, orig_dim); } q->n = n; q->beg = 0; q->step = 1; q->reduce = 0; q->orig_dim = orig_dim; }
static VALUE na_aref_md_protected(VALUE data_value) { na_aref_md_data_t *data = (na_aref_md_data_t*)(data_value); VALUE self = data->self; VALUE args = data->args; VALUE store = data->store; int ndim = data->ndim; na_index_arg_t *q = data->q; narray_t *na1 = data->na1; int keep_dim = data->keep_dim; int ndim_new; VALUE view; narray_view_t *na2; ssize_t elmsz; na_index_parse_args(args, na1, q, ndim); if (na_debug_flag) print_index_arg(q,ndim); if (keep_dim) { ndim_new = ndim; } else { ndim_new = na_ndim_new_narray(ndim, q); } view = na_s_allocate_view(CLASS_OF(self)); na_copy_flags(self, view); GetNArrayView(view,na2); na_alloc_shape((narray_t*)na2, ndim_new); na2->stridx = ALLOC_N(stridx_t,ndim_new); elmsz = nary_element_stride(self); switch(na1->type) { case NARRAY_DATA_T: case NARRAY_FILEMAP_T: na_index_aref_nadata((narray_data_t *)na1,na2,q,elmsz,ndim,keep_dim); na2->data = self; break; case NARRAY_VIEW_T: na2->offset = ((narray_view_t *)na1)->offset; na2->data = ((narray_view_t *)na1)->data; na_index_aref_naview((narray_view_t *)na1,na2,q,elmsz,ndim,keep_dim); break; } if (store) { na_get_pointer_for_write(store); // allocate memory na_store(na_flatten_dim(store,0),view); return store; } return view; }
/* Replaces the contents of self with the contents of other narray. Used in dup and clone method. @overload initialize_copy(other) @param [Numo::NArray] other @return [Numo::NArray] self */ static VALUE na_initialize_copy(VALUE self, VALUE orig) { narray_t *na; GetNArray(orig,na); na_setup(self,NA_NDIM(na),NA_SHAPE(na)); na_store(self,orig); na_copy_flags(orig,self); return self; }