JL_DLLEXPORT jl_array_t *jl_array_copy(jl_array_t *ary) { size_t elsz = ary->elsize; jl_array_t *new_ary = _new_array_(jl_typeof(ary), jl_array_ndims(ary), &ary->nrows, !ary->flags.ptrarray, elsz); memcpy(new_ary->data, ary->data, jl_array_len(ary) * elsz); return new_ary; }
static inline jl_array_t *_new_array(jl_value_t *atype, uint32_t ndims, size_t *dims) { int isunboxed=0, elsz=sizeof(void*); jl_value_t *el_type = jl_tparam0(atype); isunboxed = store_unboxed(el_type); if (isunboxed) elsz = jl_datatype_size(el_type); return _new_array_(atype, ndims, dims, isunboxed, elsz); }
static inline jl_array_t *_new_array(jl_value_t *atype, uint32_t ndims, size_t *dims) { jl_value_t *eltype = jl_tparam0(atype); size_t elsz = 0, al = 0; int isunboxed = jl_islayout_inline(eltype, &elsz, &al); if (!isunboxed) { elsz = sizeof(void*); al = elsz; } return _new_array_(atype, ndims, dims, isunboxed, elsz); }
static inline jl_array_t *_new_array(jl_value_t *atype, uint32_t ndims, size_t *dims) { jl_value_t *eltype = jl_tparam0(atype); size_t elsz = 0, al = 0; if (!jl_is_kind(jl_typeof(eltype))) jl_type_error_rt("Array", "element type", (jl_value_t*)jl_type_type, eltype); int isunboxed = jl_islayout_inline(eltype, &elsz, &al); int isunion = jl_is_uniontype(eltype); if (!isunboxed) { elsz = sizeof(void*); al = elsz; } return _new_array_(atype, ndims, dims, isunboxed, isunion, elsz); }
jl_array_t *jl_new_array_for_deserialization(jl_value_t *atype, uint32_t ndims, size_t *dims, int isunboxed, int elsz) { return _new_array_(atype, ndims, dims, isunboxed, elsz); }