char * na_get_pointer_for_write(VALUE self) { char *ptr; narray_t *na; GetNArray(self,na); if (OBJ_FROZEN(self)) { rb_raise(rb_eRuntimeError, "cannot write to frozen NArray."); } if (NA_TYPE(na) == NARRAY_DATA_T) { ptr = NA_DATA_PTR(na); if (na->size > 0 && ptr == NULL) { rb_funcall(self, id_allocate, 0); ptr = NA_DATA_PTR(na); } } else { ptr = na_get_pointer(self); if (NA_SIZE(na) > 0 && ptr == NULL) { rb_raise(rb_eRuntimeError,"cannot write to unallocated NArray"); } } //NA_SET_LOCK(na); return ptr; }
char * na_get_pointer_for_read(VALUE self) { char *ptr; narray_t *na; GetNArray(self,na); //if (NA_TEST_LOCK(na)) { // rb_raise(rb_eRuntimeError, "cannot read locked NArray."); //} if (NA_TYPE(na) == NARRAY_DATA_T) { ptr = NA_DATA_PTR(na); } else { ptr = na_get_pointer(self); } if (NA_SIZE(na) > 0 && ptr == NULL) { rb_raise(rb_eRuntimeError,"cannot read unallocated NArray"); } //NA_SET_LOCK(na); return ptr; }
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; }