Skip to content

Commit 6be8300

Browse files
committed
only have one loop for unaligned or strided casts
1 parent 808970f commit 6be8300

File tree

1 file changed

+7
-44
lines changed

1 file changed

+7
-44
lines changed

asciidtype/asciidtype/src/casts.c

Lines changed: 7 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -62,46 +62,11 @@ ascii_to_ascii_contiguous(PyArrayMethod_Context *context, char *const data[],
6262
}
6363

6464
static int
65-
ascii_to_ascii_strided(PyArrayMethod_Context *context, char *const data[],
66-
npy_intp const dimensions[], npy_intp const strides[],
67-
NpyAuxData *NPY_UNUSED(auxdata))
68-
{
69-
PyArray_Descr **descrs = context->descriptors;
70-
long in_size = ((ASCIIDTypeObject *)descrs[0])->size;
71-
long out_size = ((ASCIIDTypeObject *)descrs[1])->size;
72-
long copy_size;
73-
74-
if (out_size > in_size) {
75-
copy_size = in_size;
76-
}
77-
else {
78-
copy_size = out_size;
79-
}
80-
81-
npy_intp N = dimensions[0];
82-
char *in = data[0];
83-
char *out = data[1];
84-
npy_intp in_stride = strides[0];
85-
npy_intp out_stride = strides[1];
86-
87-
while (N--) {
88-
for (int i = 0; i < copy_size; i++) {
89-
*(out + i) = *(in + i);
90-
}
91-
for (int i = copy_size; i < out_size; i++) {
92-
*(out + i) = '\0';
93-
}
94-
in += in_stride;
95-
out += out_stride;
96-
}
97-
98-
return 0;
99-
}
100-
101-
static int
102-
ascii_to_ascii_unaligned(PyArrayMethod_Context *context, char *const data[],
103-
npy_intp const dimensions[], npy_intp const strides[],
104-
NpyAuxData *NPY_UNUSED(auxdata))
65+
ascii_to_ascii_strided_or_unaligned(PyArrayMethod_Context *context,
66+
char *const data[],
67+
npy_intp const dimensions[],
68+
npy_intp const strides[],
69+
NpyAuxData *NPY_UNUSED(auxdata))
10570
{
10671
PyArray_Descr **descrs = context->descriptors;
10772
long in_size = ((ASCIIDTypeObject *)descrs[0])->size;
@@ -151,11 +116,9 @@ ascii_to_ascii_get_loop(PyArrayMethod_Context *context, int aligned,
151116
if (aligned && contig) {
152117
*out_loop = (PyArrayMethod_StridedLoop *)&ascii_to_ascii_contiguous;
153118
}
154-
else if (aligned) {
155-
*out_loop = (PyArrayMethod_StridedLoop *)&ascii_to_ascii_strided;
156-
}
157119
else {
158-
*out_loop = (PyArrayMethod_StridedLoop *)&ascii_to_ascii_unaligned;
120+
*out_loop = (PyArrayMethod_StridedLoop
121+
*)&ascii_to_ascii_strided_or_unaligned;
159122
}
160123

161124
*flags = 0;

0 commit comments

Comments
 (0)