Skip to content

Commit 0e92ad9

Browse files
committed
Merge pull request #675 from izaid/memblock
Updates to match libdynd
2 parents 3364385 + 5c22f31 commit 0e92ad9

7 files changed

Lines changed: 19 additions & 28 deletions

File tree

dynd/include/array_functions.hpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ inline dynd::nd::array make_strided_array(const dynd::ndt::type &dtp, intptr_t n
5252
dynd::nd::array result;
5353
char *data_ptr = NULL;
5454
if (array_tp.get_base_id() == dynd::memory_id) {
55-
result = dynd::make_array_memory_block(array_tp, array_tp.get_arrmeta_size());
55+
result = dynd::nd::make_array_memory_block(array_tp, array_tp.get_arrmeta_size());
5656
array_tp.extended<dynd::ndt::base_memory_type>()->data_alloc(&data_ptr, data_size);
5757
}
5858
else {
5959
// Allocate the array arrmeta and data in one memory block
60-
result = dynd::make_array_memory_block(array_tp, array_tp.get_arrmeta_size(), data_size,
60+
result = dynd::nd::make_array_memory_block(array_tp, array_tp.get_arrmeta_size(), data_size,
6161
array_tp.get_data_alignment(), &data_ptr);
6262
}
6363

@@ -71,9 +71,9 @@ inline dynd::nd::array make_strided_array(const dynd::ndt::type &dtp, intptr_t n
7171
}
7272

7373
// Fill in the preamble arrmeta
74-
dynd::array_preamble *ndo = reinterpret_cast<dynd::array_preamble *>(result.get());
74+
dynd::nd::array_preamble *ndo = reinterpret_cast<dynd::nd::array_preamble *>(result.get());
7575
ndo->data = data_ptr;
76-
ndo->owner = NULL;
76+
ndo->owner = dynd::nd::memory_block();
7777
ndo->flags = dynd::nd::read_access_flag | dynd::nd::write_access_flag;
7878

7979
if (!any_variable_dims) {
@@ -395,13 +395,13 @@ inline dynd::nd::array nd_fields(const dynd::nd::array &n, PyObject *field_list)
395395

396396
// Allocate the new memory block.
397397
size_t arrmeta_size = result_tp.get_arrmeta_size();
398-
dynd::nd::array result = dynd::make_array_memory_block(result_tp, arrmeta_size);
398+
dynd::nd::array result = dynd::nd::make_array_memory_block(result_tp, arrmeta_size);
399399

400400
// Clone the data pointer
401401
result.get()->data = n.get()->data;
402-
result.get()->owner = n.get()->owner;
403-
if (!result.get()->owner) {
404-
result.get()->owner = n.get();
402+
result->owner = n->owner;
403+
if (!result->owner) {
404+
result->owner = n;
405405
}
406406

407407
// Copy the flags

dynd/include/kernels/apply_pyobject_kernel.hpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,7 @@ struct apply_pyobject_kernel : dynd::nd::base_strided_kernel<apply_pyobject_kern
7676
pydynd::pyobject_ownref args(PyTuple_New(nsrc));
7777
for (intptr_t i = 0; i != nsrc; ++i) {
7878
dynd::ndt::type tp = src_tp[i];
79-
dynd::nd::array n(
80-
reinterpret_cast<dynd::array_preamble *>(dynd::make_array_memory_block(tp, tp.get_arrmeta_size()).get()),
81-
true);
79+
dynd::nd::array n = dynd::nd::make_array_memory_block(tp, tp.get_arrmeta_size());
8280
n.get()->flags = dynd::nd::read_access_flag;
8381
n.get()->data = const_cast<char *>(src[i]);
8482
if (src_tp[i].get_arrmeta_size() > 0) {
@@ -110,9 +108,7 @@ struct apply_pyobject_kernel : dynd::nd::base_strided_kernel<apply_pyobject_kern
110108
pydynd::pyobject_ownref args(PyTuple_New(nsrc));
111109
for (intptr_t i = 0; i != nsrc; ++i) {
112110
dynd::ndt::type tp = src_tp[i];
113-
dynd::nd::array n(
114-
reinterpret_cast<dynd::array_preamble *>(dynd::make_array_memory_block(tp, tp.get_arrmeta_size()).get()),
115-
true);
111+
dynd::nd::array n = dynd::nd::make_array_memory_block(tp, tp.get_arrmeta_size());
116112
n.get()->flags = dynd::nd::read_access_flag;
117113
n.get()->data = const_cast<char *>(src[i]);
118114
if (src_tp[i].get_arrmeta_size() > 0) {

dynd/src/array_as_pep3118.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ int pydynd::array_getbuffer_pep3118(PyObject *ndo, Py_buffer *buffer, int flags)
261261
throw runtime_error("array_getbuffer_pep3118 called on a non-array");
262262
}
263263
nd::array &n = pydynd::array_to_cpp_ref(ndo);
264-
array_preamble *preamble = n.get();
264+
nd::array_preamble *preamble = n.get();
265265
ndt::type tp = n.get_type();
266266

267267
// Check if a writable buffer is requested

dynd/src/array_from_py.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -437,13 +437,10 @@ dynd::nd::array pydynd::array_from_py(PyObject *obj, uint32_t access_flags, bool
437437
intrusive_ptr<memory_block_data> bytesref =
438438
make_external_memory_block(reinterpret_cast<void *>(obj), &py_decref_function);
439439
char *data_ptr;
440-
result = nd::array(reinterpret_cast<dynd::array_preamble *>(
441-
make_array_memory_block(d, d.extended()->get_arrmeta_size(), d.get_data_size(),
442-
d.get_data_alignment(), &data_ptr)
443-
.get()),
444-
true);
440+
result = nd::make_array_memory_block(d, d.extended()->get_arrmeta_size(), d.get_data_size(),
441+
d.get_data_alignment(), &data_ptr);
445442
result.get()->data = data_ptr;
446-
result.get()->owner = NULL;
443+
result.get()->owner = nd::memory_block();
447444
// The scalar consists of pointers to the byte string data
448445
reinterpret_cast<dynd::string *>(data_ptr)->assign(data, len);
449446
// The arrmeta

dynd/src/assign.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ PYDYND_API void assign_init()
2222
typedef type_id_sequence<bool_id, int8_id, int16_id, int32_id, int64_id, int128_id, uint8_id, uint16_id, uint32_id,
2323
uint64_id, uint128_id, float16_id, float32_id, float64_id, complex_float32_id,
2424
complex_float64_id, bytes_id, fixed_bytes_id, string_id, fixed_string_id, option_id, type_id,
25-
tuple_id, struct_id, fixed_dim_id, var_dim_id> type_ids;
25+
tuple_id, struct_id, fixed_dim_id, var_dim_id>
26+
type_ids;
2627

2728
PyDateTime_IMPORT;
2829

@@ -62,8 +63,7 @@ void array_copy_to_numpy(PyArrayObject *dst_arr, const dynd::ndt::type &src_tp,
6263

6364
// TODO: This is a hack, need a proper way to pass this dst param
6465
intptr_t tmp_dst_arrmeta_size = dst_ndim * sizeof(dynd::fixed_dim_type_arrmeta) + sizeof(copy_to_numpy_arrmeta);
65-
dynd::nd::array tmp_dst(
66-
reinterpret_cast<dynd::array_preamble *>(dynd::make_array_memory_block(dst_tp, tmp_dst_arrmeta_size).get()), true);
66+
dynd::nd::array tmp_dst = dynd::nd::make_array_memory_block(dst_tp, tmp_dst_arrmeta_size);
6767
tmp_dst.get()->flags = dynd::nd::read_access_flag | dynd::nd::write_access_flag;
6868
if (dst_tp.get_arrmeta_size() > 0) {
6969
memcpy(tmp_dst.get()->metadata(), dst_am, tmp_dst_arrmeta_size);

dynd/src/copy_from_numpy_arrfunc.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,7 @@ void pydynd::nd::array_copy_from_numpy(const dynd::ndt::type &dst_tp, const char
186186
src_am_holder.am.src_alignment = src_alignment;
187187

188188
// TODO: This is a hack, need a proper way to pass this dst param
189-
dynd::nd::array tmp_dst(
190-
reinterpret_cast<dynd::array_preamble *>(dynd::make_array_memory_block(dst_tp, dst_tp.get_arrmeta_size()).get()),
191-
true);
189+
dynd::nd::array tmp_dst = dynd::nd::make_array_memory_block(dst_tp, dst_tp.get_arrmeta_size());
192190
tmp_dst.get()->flags = dynd::nd::read_access_flag | dynd::nd::write_access_flag;
193191
if (dst_tp.get_arrmeta_size() > 0) {
194192
dst_tp.extended()->arrmeta_copy_construct(tmp_dst.get()->metadata(), dst_arrmeta,

dynd/src/numpy_interop.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ dynd::nd::array pydynd::array_from_numpy_array(PyArrayObject *obj, uint32_t acce
145145
dynd::nd::array result = dynd::nd::make_strided_array_from_data(
146146
d, PyArray_NDIM(obj), PyArray_DIMS(obj), PyArray_STRIDES(obj),
147147
dynd::nd::read_access_flag | (PyArray_ISWRITEABLE(obj) ? dynd::nd::write_access_flag : 0), PyArray_BYTES(obj),
148-
std::move(memblock), &arrmeta);
148+
dynd::nd::memory_block(std::move(memblock).get(), true), &arrmeta);
149149
if (d.get_id() == dynd::struct_id) {
150150
// If it's a struct, there's additional arrmeta that needs to be populated
151151
pydynd::fill_arrmeta_from_numpy_dtype(d, PyArray_DESCR(obj), arrmeta);

0 commit comments

Comments
 (0)