reuse in `
This commit is contained in:
parent
0e46008596
commit
4be83c88b2
18
src/md1.c
18
src/md1.c
@ -47,9 +47,9 @@ B scan_c1(B t, B f, B x) {
|
|||||||
if (!isArr(x)) return err("`: argument cannot be a scalar");
|
if (!isArr(x)) return err("`: argument cannot be a scalar");
|
||||||
ur xr = a(x)->rank;
|
ur xr = a(x)->rank;
|
||||||
if (xr==0) return err("`: argument cannot be a scalar");
|
if (xr==0) return err("`: argument cannot be a scalar");
|
||||||
HArr_p r = m_harrc(x);
|
HArr_p r = (v(x)->type==t_harr && reusable(x))? harr_parts(inci(x)) : m_harrc(x);
|
||||||
usz ia = r.c->ia;
|
usz ia = r.c->ia;
|
||||||
if (ia==0) return r.b;
|
if (ia==0) { dec(x); return r.b; }
|
||||||
BS2B xget = TI(x).get;
|
BS2B xget = TI(x).get;
|
||||||
if (xr==1) {
|
if (xr==1) {
|
||||||
r.a[0] = xget(x,0);
|
r.a[0] = xget(x,0);
|
||||||
@ -65,31 +65,27 @@ B scan_c1(B t, B f, B x) {
|
|||||||
B scan_c2(B t, B f, B w, B x) {
|
B scan_c2(B t, B f, B w, B x) {
|
||||||
if (!isArr(x)) return err("`: 𝕩 cannot be a scalar");
|
if (!isArr(x)) return err("`: 𝕩 cannot be a scalar");
|
||||||
ur xr = a(x)->rank; usz* xsh = a(x)->sh; BS2B xget = TI(x).get;
|
ur xr = a(x)->rank; usz* xsh = a(x)->sh; BS2B xget = TI(x).get;
|
||||||
|
HArr_p r = (v(x)->type==t_harr && reusable(x))? harr_parts(inci(x)) : m_harrc(x);
|
||||||
|
usz ia = r.c->ia;
|
||||||
if (isArr(w)) {
|
if (isArr(w)) {
|
||||||
ur wr = a(w)->rank; usz* wsh = a(w)->sh; BS2B wget = TI(w).get;
|
ur wr = a(w)->rank; usz* wsh = a(w)->sh; BS2B wget = TI(w).get;
|
||||||
if (xr==0) return err("`: 𝕩 cannot be a scalar");
|
if (xr==0) return err("`: 𝕩 cannot be a scalar");
|
||||||
if (wr+1 != xr) return err("`: shape of 𝕨 must match the cell of 𝕩");
|
if (wr+1 != xr) return err("`: shape of 𝕨 must match the cell of 𝕩");
|
||||||
if (memcmp(wsh, xsh+1, wr)) return err("`: shape of 𝕨 must match the cell of 𝕩");
|
if (memcmp(wsh, xsh+1, wr)) return err("`: shape of 𝕨 must match the cell of 𝕩");
|
||||||
HArr_p r = m_harrc(x);
|
if (ia==0) { dec(x); return r.b; }
|
||||||
usz ia = r.c->ia;
|
|
||||||
if (ia==0) return r.b;
|
|
||||||
usz csz = arr_csz(x);
|
usz csz = arr_csz(x);
|
||||||
for (usz i = 0; i < csz; i++) r.a[i] = c2(f, wget(w,i), xget(x,i));
|
for (usz i = 0; i < csz; i++) r.a[i] = c2(f, wget(w,i), xget(x,i));
|
||||||
for (usz i = csz; i < ia; i++) r.a[i] = c2(f, inci(r.a[i-csz]), xget(x,i));
|
for (usz i = csz; i < ia; i++) r.a[i] = c2(f, inci(r.a[i-csz]), xget(x,i));
|
||||||
dec(w);
|
dec(w);
|
||||||
dec(x);
|
|
||||||
return r.b;
|
|
||||||
} else {
|
} else {
|
||||||
if (xr!=1) return err("`: if 𝕨 is scalar, 𝕩 must be a vector");
|
if (xr!=1) return err("`: if 𝕨 is scalar, 𝕩 must be a vector");
|
||||||
HArr_p r = m_harrc(x);
|
if (ia==0) { dec(x); return r.b; }
|
||||||
usz ia = r.c->ia;
|
|
||||||
if (ia==0) return r.b;
|
|
||||||
B pr = r.a[0] = c2(f, w, xget(x,0));
|
B pr = r.a[0] = c2(f, w, xget(x,0));
|
||||||
for (usz i = 1; i < ia; i++) r.a[i] = pr = c2(f, inci(pr), xget(x,i));
|
for (usz i = 1; i < ia; i++) r.a[i] = pr = c2(f, inci(pr), xget(x,i));
|
||||||
|
}
|
||||||
dec(x);
|
dec(x);
|
||||||
return r.b;
|
return r.b;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#define ba(NAME) bi_##NAME = mm_alloc(sizeof(Md1), t_md1_def, ftag(MD1_TAG)); c(Md1,bi_##NAME)->c2 = NAME##_c2; c(Md1,bi_##NAME)->c1 = NAME##_c1 ; c(Md1,bi_##NAME)->id=pm1_##NAME;
|
#define ba(NAME) bi_##NAME = mm_alloc(sizeof(Md1), t_md1_def, ftag(MD1_TAG)); c(Md1,bi_##NAME)->c2 = NAME##_c2; c(Md1,bi_##NAME)->c1 = NAME##_c1 ; c(Md1,bi_##NAME)->id=pm1_##NAME;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user