Skip to content

Commit 2bcac16

Browse files
committed
Merge pull request #696 from izaid/type
Made assign_to_pyobject_callable templated on types
2 parents 3cfa675 + d356de5 commit 2bcac16

3 files changed

Lines changed: 84 additions & 106 deletions

File tree

dynd/include/callables/assign_to_pyobject_callable.hpp

Lines changed: 50 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,24 @@
66
namespace pydynd {
77
namespace nd {
88

9-
template <type_id_t Arg0ID>
9+
template <typename Arg0Type>
1010
class assign_to_pyobject_callable
11-
: public dynd::nd::default_instantiable_callable<assign_to_pyobject_kernel<Arg0ID>> {
11+
: public dynd::nd::default_instantiable_callable<assign_to_pyobject_kernel<Arg0Type>> {
1212
public:
1313
assign_to_pyobject_callable()
14-
: dynd::nd::default_instantiable_callable<assign_to_pyobject_kernel<Arg0ID>>(
14+
: dynd::nd::default_instantiable_callable<assign_to_pyobject_kernel<Arg0Type>>(
1515
dynd::ndt::make_type<dynd::ndt::callable_type>(dynd::ndt::make_type<pyobject_type>(),
16-
{dynd::ndt::type(Arg0ID)}))
16+
{dynd::ndt::make_type<Arg0Type>()}))
1717
{
1818
}
1919
};
2020

2121
template <>
22-
class assign_to_pyobject_callable<fixed_bytes_id> : public dynd::nd::base_callable {
22+
class assign_to_pyobject_callable<ndt::fixed_bytes_type> : public dynd::nd::base_callable {
2323
public:
2424
assign_to_pyobject_callable()
25-
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(dynd::ndt::make_type<pyobject_type>(),
26-
{dynd::ndt::type(fixed_bytes_id)}))
25+
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(
26+
dynd::ndt::make_type<pyobject_type>(), {dynd::ndt::make_type<ndt::fixed_bytes_kind_type>()}))
2727
{
2828
}
2929

@@ -52,11 +52,11 @@ namespace nd {
5252
};
5353

5454
template <>
55-
class assign_to_pyobject_callable<string_id> : public dynd::nd::base_callable {
55+
class assign_to_pyobject_callable<string> : public dynd::nd::base_callable {
5656
public:
5757
assign_to_pyobject_callable()
5858
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(dynd::ndt::make_type<pyobject_type>(),
59-
{dynd::ndt::type(string_id)}))
59+
{dynd::ndt::make_type<string>()}))
6060
{
6161
}
6262

@@ -68,28 +68,24 @@ namespace nd {
6868
switch (src_tp[0].extended<dynd::ndt::base_string_type>()->get_encoding()) {
6969
case dynd::string_encoding_ascii:
7070
cg.emplace_back([](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq, char *DYND_UNUSED(data),
71-
const char *dst_arrmeta, size_t nsrc, const char *const *src_arrmeta) {
72-
kb.emplace_back<::detail::string_ascii_assign_kernel>(kernreq);
73-
});
71+
const char *dst_arrmeta, size_t nsrc,
72+
const char *const *src_arrmeta) { kb.emplace_back<string_ascii_assign_kernel>(kernreq); });
7473
break;
7574
case dynd::string_encoding_utf_8:
7675
cg.emplace_back([](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq, char *DYND_UNUSED(data),
77-
const char *dst_arrmeta, size_t nsrc, const char *const *src_arrmeta) {
78-
kb.emplace_back<::detail::string_utf8_assign_kernel>(kernreq);
79-
});
76+
const char *dst_arrmeta, size_t nsrc,
77+
const char *const *src_arrmeta) { kb.emplace_back<string_utf8_assign_kernel>(kernreq); });
8078
break;
8179
case dynd::string_encoding_ucs_2:
8280
case dynd::string_encoding_utf_16:
8381
cg.emplace_back([](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq, char *DYND_UNUSED(data),
84-
const char *dst_arrmeta, size_t nsrc, const char *const *src_arrmeta) {
85-
kb.emplace_back<::detail::string_utf16_assign_kernel>(kernreq);
86-
});
82+
const char *dst_arrmeta, size_t nsrc,
83+
const char *const *src_arrmeta) { kb.emplace_back<string_utf16_assign_kernel>(kernreq); });
8784
break;
8885
case dynd::string_encoding_utf_32:
8986
cg.emplace_back([](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq, char *DYND_UNUSED(data),
90-
const char *dst_arrmeta, size_t nsrc, const char *const *src_arrmeta) {
91-
kb.emplace_back<::detail::string_utf32_assign_kernel>(kernreq);
92-
});
87+
const char *dst_arrmeta, size_t nsrc,
88+
const char *const *src_arrmeta) { kb.emplace_back<string_utf32_assign_kernel>(kernreq); });
9389
break;
9490
default:
9591
throw std::runtime_error("no string_assign_kernel");
@@ -100,11 +96,11 @@ namespace nd {
10096
};
10197

10298
template <>
103-
class assign_to_pyobject_callable<fixed_string_id> : public dynd::nd::base_callable {
99+
class assign_to_pyobject_callable<ndt::fixed_string_type> : public dynd::nd::base_callable {
104100
public:
105101
assign_to_pyobject_callable()
106-
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(dynd::ndt::make_type<pyobject_type>(),
107-
{dynd::ndt::type(fixed_string_id)}))
102+
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(
103+
dynd::ndt::make_type<pyobject_type>(), {dynd::ndt::make_type<ndt::fixed_string_kind_type>()}))
108104
{
109105
}
110106

@@ -119,29 +115,29 @@ namespace nd {
119115
cg.emplace_back([src0_data_size](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq,
120116
char *DYND_UNUSED(data), const char *DYND_UNUSED(dst_arrmeta),
121117
size_t DYND_UNUSED(nsrc), const char *const *DYND_UNUSED(src_arrmeta)) {
122-
kb.emplace_back<::detail::fixed_string_ascii_assign_kernel>(kernreq, src0_data_size);
118+
kb.emplace_back<fixed_string_ascii_assign_kernel>(kernreq, src0_data_size);
123119
});
124120
break;
125121
case dynd::string_encoding_utf_8:
126122
cg.emplace_back([src0_data_size](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq,
127123
char *DYND_UNUSED(data), const char *DYND_UNUSED(dst_arrmeta),
128124
size_t DYND_UNUSED(nsrc), const char *const *DYND_UNUSED(src_arrmeta)) {
129-
kb.emplace_back<::detail::fixed_string_utf8_assign_kernel>(kernreq, src0_data_size);
125+
kb.emplace_back<fixed_string_utf8_assign_kernel>(kernreq, src0_data_size);
130126
});
131127
break;
132128
case dynd::string_encoding_ucs_2:
133129
case dynd::string_encoding_utf_16:
134130
cg.emplace_back([src0_data_size](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq,
135131
char *DYND_UNUSED(data), const char *DYND_UNUSED(dst_arrmeta),
136132
size_t DYND_UNUSED(nsrc), const char *const *DYND_UNUSED(src_arrmeta)) {
137-
kb.emplace_back<::detail::fixed_string_utf16_assign_kernel>(kernreq, src0_data_size);
133+
kb.emplace_back<fixed_string_utf16_assign_kernel>(kernreq, src0_data_size);
138134
});
139135
break;
140136
case dynd::string_encoding_utf_32:
141137
cg.emplace_back([src0_data_size](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq,
142138
char *DYND_UNUSED(data), const char *DYND_UNUSED(dst_arrmeta),
143139
size_t DYND_UNUSED(nsrc), const char *const *DYND_UNUSED(src_arrmeta)) {
144-
kb.emplace_back<::detail::fixed_string_utf32_assign_kernel>(kernreq, src0_data_size);
140+
kb.emplace_back<fixed_string_utf32_assign_kernel>(kernreq, src0_data_size);
145141
});
146142
break;
147143
default:
@@ -153,11 +149,12 @@ namespace nd {
153149
};
154150

155151
template <>
156-
class assign_to_pyobject_callable<option_id> : public dynd::nd::base_callable {
152+
class assign_to_pyobject_callable<ndt::option_type> : public dynd::nd::base_callable {
157153
public:
158154
assign_to_pyobject_callable()
159-
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(dynd::ndt::make_type<pyobject_type>(),
160-
{dynd::ndt::type(option_id)}))
155+
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(
156+
dynd::ndt::make_type<pyobject_type>(),
157+
{dynd::ndt::make_type<ndt::option_type>(ndt::make_type<ndt::any_kind_type>())}))
161158
{
162159
}
163160

@@ -170,13 +167,13 @@ namespace nd {
170167
cg.emplace_back([](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq, char *DYND_UNUSED(data),
171168
const char *dst_arrmeta, size_t nsrc, const char *const *src_arrmeta) {
172169
intptr_t root_ckb_offset = kb.size();
173-
kb.emplace_back<assign_to_pyobject_kernel<option_id>>(kernreq);
170+
kb.emplace_back<assign_to_pyobject_kernel<ndt::option_type>>(kernreq);
174171

175-
assign_to_pyobject_kernel<option_id> *self_ck =
176-
kb.get_at<assign_to_pyobject_kernel<option_id>>(root_ckb_offset);
172+
assign_to_pyobject_kernel<ndt::option_type> *self_ck =
173+
kb.get_at<assign_to_pyobject_kernel<ndt::option_type>>(root_ckb_offset);
177174
kb(dynd::kernel_request_single, nullptr, nullptr, nsrc, src_arrmeta);
178175

179-
self_ck = kb.get_at<assign_to_pyobject_kernel<option_id>>(root_ckb_offset);
176+
self_ck = kb.get_at<assign_to_pyobject_kernel<ndt::option_type>>(root_ckb_offset);
180177
self_ck->m_assign_value_offset = kb.size() - root_ckb_offset;
181178

182179
kb(dynd::kernel_request_single, nullptr, dst_arrmeta, nsrc, src_arrmeta);
@@ -212,11 +209,11 @@ namespace nd {
212209
};
213210

214211
template <>
215-
class assign_to_pyobject_callable<tuple_id> : public dynd::nd::base_callable {
212+
class assign_to_pyobject_callable<ndt::tuple_type> : public dynd::nd::base_callable {
216213
public:
217214
assign_to_pyobject_callable()
218-
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(dynd::ndt::make_type<pyobject_type>(),
219-
{dynd::ndt::type(tuple_id)}))
215+
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(
216+
dynd::ndt::make_type<pyobject_type>(), {dynd::ndt::make_type<ndt::tuple_type>()}))
220217
{
221218
}
222219

@@ -260,11 +257,11 @@ namespace nd {
260257
};
261258

262259
template <>
263-
class assign_to_pyobject_callable<struct_id> : public dynd::nd::base_callable {
260+
class assign_to_pyobject_callable<ndt::struct_type> : public dynd::nd::base_callable {
264261
public:
265262
assign_to_pyobject_callable()
266-
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(dynd::ndt::make_type<pyobject_type>(),
267-
{dynd::ndt::type(struct_id)}))
263+
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(
264+
dynd::ndt::make_type<pyobject_type>(), {dynd::ndt::make_type<ndt::struct_type>()}))
268265
{
269266
}
270267

@@ -284,10 +281,10 @@ namespace nd {
284281
const char *dst_arrmeta, size_t nsrc, const char *const *src_arrmeta) {
285282
intptr_t ckb_offset = kb.size();
286283
intptr_t root_ckb_offset = ckb_offset;
287-
kb.emplace_back<assign_to_pyobject_kernel<struct_id>>(kernreq);
284+
kb.emplace_back<assign_to_pyobject_kernel<ndt::struct_type>>(kernreq);
288285

289-
assign_to_pyobject_kernel<struct_id> *self_ck =
290-
kb.get_at<assign_to_pyobject_kernel<struct_id>>(root_ckb_offset);
286+
assign_to_pyobject_kernel<ndt::struct_type> *self_ck =
287+
kb.get_at<assign_to_pyobject_kernel<ndt::struct_type>>(root_ckb_offset);
291288

292289
ckb_offset = kb.size();
293290
self_ck->m_src_tp = src0_tp;
@@ -302,7 +299,7 @@ namespace nd {
302299

303300
for (intptr_t i = 0; i < field_count; ++i) {
304301
kb.reserve(ckb_offset);
305-
self_ck = kb.get_at<assign_to_pyobject_kernel<struct_id>>(root_ckb_offset);
302+
self_ck = kb.get_at<assign_to_pyobject_kernel<ndt::struct_type>>(root_ckb_offset);
306303
self_ck->m_copy_el_offsets[i] = ckb_offset - root_ckb_offset;
307304
const char *field_arrmeta = src_arrmeta[0] + arrmeta_offsets[i];
308305
kb(dynd::kernel_request_single, nullptr, dst_arrmeta, nsrc, &field_arrmeta);
@@ -357,11 +354,11 @@ namespace nd {
357354
};
358355

359356
template <>
360-
class assign_to_pyobject_callable<fixed_dim_id> : public dynd::nd::base_callable {
357+
class assign_to_pyobject_callable<ndt::fixed_dim_type> : public dynd::nd::base_callable {
361358
public:
362359
assign_to_pyobject_callable()
363360
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(dynd::ndt::make_type<pyobject_type>(),
364-
{dynd::ndt::type(fixed_dim_id)}))
361+
{dynd::ndt::type("Fixed * Any")}))
365362
{
366363
}
367364

@@ -372,7 +369,7 @@ namespace nd {
372369
cg.emplace_back([](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq, char *DYND_UNUSED(data),
373370
const char *dst_arrmeta, size_t DYND_UNUSED(nsrc), const char *const *src_arrmeta) {
374371
const char *src_element_arrmeta[1] = {src_arrmeta[0] + sizeof(size_stride_t)};
375-
kb.emplace_back<assign_to_pyobject_kernel<fixed_dim_id>>(
372+
kb.emplace_back<assign_to_pyobject_kernel<ndt::fixed_dim_type>>(
376373
kernreq, reinterpret_cast<const size_stride_t *>(src_arrmeta[0])->dim_size,
377374
reinterpret_cast<const size_stride_t *>(src_arrmeta[0])->stride);
378375

@@ -410,11 +407,12 @@ namespace nd {
410407
};
411408

412409
template <>
413-
class assign_to_pyobject_callable<var_dim_id> : public dynd::nd::base_callable {
410+
class assign_to_pyobject_callable<ndt::var_dim_type> : public dynd::nd::base_callable {
414411
public:
415412
assign_to_pyobject_callable()
416-
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(dynd::ndt::make_type<pyobject_type>(),
417-
{dynd::ndt::type(var_dim_id)}))
413+
: dynd::nd::base_callable(dynd::ndt::make_type<dynd::ndt::callable_type>(
414+
dynd::ndt::make_type<pyobject_type>(),
415+
{dynd::ndt::make_type<ndt::var_dim_type>(ndt::make_type<ndt::any_kind_type>())}))
418416
{
419417
}
420418

@@ -426,7 +424,7 @@ namespace nd {
426424
cg.emplace_back([el_tp](dynd::nd::kernel_builder &kb, dynd::kernel_request_t kernreq, char *DYND_UNUSED(data),
427425
const char *dst_arrmeta, size_t nsrc, const char *const *src_arrmeta) {
428426
intptr_t ckb_offset = kb.size();
429-
kb.emplace_back<assign_to_pyobject_kernel<var_dim_id>>(
427+
kb.emplace_back<assign_to_pyobject_kernel<ndt::var_dim_type>>(
430428
kernreq, reinterpret_cast<const dynd::ndt::var_dim_type::metadata_type *>(src_arrmeta[0])->offset,
431429
reinterpret_cast<const dynd::ndt::var_dim_type::metadata_type *>(src_arrmeta[0])->stride);
432430

0 commit comments

Comments
 (0)