allZeroes & allOnes variants which set result flags
This commit is contained in:
parent
002d58e057
commit
f33e1e0dcc
@ -242,7 +242,7 @@ B find_c2(B t, B w, B x) {
|
||||
usz wl = IA(w);
|
||||
usz xl = IA(x);
|
||||
if (wl > xl) { r = emptyIVec(); goto dec_ret; }
|
||||
if (wl == 0) { r = taga(arr_shVec(allOnes(xl+1))); goto dec_ret; }
|
||||
if (wl == 0) { r = taga(arr_shVec(allOnesFl(xl+1))); goto dec_ret; }
|
||||
// Compare elements of w to slices of x
|
||||
usz rl = xl - wl + 1; // Result length
|
||||
u8* xp = tyany_ptr(x);
|
||||
@ -315,7 +315,7 @@ B find_c2(B t, B w, B x) {
|
||||
rsh[i] = c;
|
||||
}
|
||||
}
|
||||
r = taga(arr_shSetUO(allOnes(ia), xr, sh));
|
||||
r = taga(arr_shSetUO(allOnesFl(ia), xr, sh));
|
||||
goto dec_ret;
|
||||
}
|
||||
|
||||
|
||||
@ -417,7 +417,7 @@ B GRADE_CAT(c2)(B t, B w, B x) {
|
||||
B r; Arr* ra;
|
||||
|
||||
if (wia==0 | xia==0) {
|
||||
ra = allZeroes(xia);
|
||||
ra = allZeroesFl(xia);
|
||||
goto copysh_done;
|
||||
}
|
||||
if (wia==1) {
|
||||
@ -505,12 +505,12 @@ B GRADE_CAT(c2)(B t, B w, B x) {
|
||||
w=toI32Any(w); x=toI32Any(x);
|
||||
#endif
|
||||
} else {
|
||||
ra = GRADE_UD(reshape_one(xia, m_f64(wia)), allZeroes(xia));
|
||||
ra = GRADE_UD(reshape_one(xia, m_f64(wia)), allZeroesFl(xia));
|
||||
goto copysh_done;
|
||||
}
|
||||
} else { // w is character
|
||||
if (elNum(xe)) {
|
||||
ra = GRADE_UD(allZeroes(xia), reshape_one(xia, m_f64(wia)));
|
||||
ra = GRADE_UD(allZeroesFl(xia), reshape_one(xia, m_f64(wia)));
|
||||
goto copysh_done;
|
||||
}
|
||||
|
||||
|
||||
@ -174,7 +174,7 @@ B memberOf_c1(B t, B x) {
|
||||
if (sameness == 1) goto allSame;
|
||||
if (RARE(sameness == 2)) {
|
||||
decG(x);
|
||||
return taga(arr_shVec(allOnes(n)));
|
||||
return taga(arr_shVec(allOnesFl(n)));
|
||||
}
|
||||
|
||||
if (use_sorted(x, lw)) {
|
||||
@ -403,7 +403,7 @@ B find_c1(B, B);
|
||||
B indexOf_c1(B t, B x) {
|
||||
if (isAtm(x) || RNK(x)==0) thrM("⊐: 𝕩 cannot have rank 0");
|
||||
u64 n = *SH(x);
|
||||
if (n<=1) { zeroRes: decG(x); return n? taga(arr_shVec(allZeroes(n))) : emptyIVec(); }
|
||||
if (n<=1) { zeroRes: decG(x); return n? taga(arr_shVec(allZeroesFl(n))) : emptyIVec(); }
|
||||
if (n>(usz)I32_MAX+1) thrM("⊐: Argument length >2⋆31 not supported");
|
||||
|
||||
usz csz = arr_csz(x);
|
||||
|
||||
@ -371,7 +371,7 @@ B rand_range_c2(B t, B w, B x) {
|
||||
PLAINLOOP for (usz i = 0; i < am; i++) rp[i] = wy2u01(wyrand(&seed));
|
||||
} else {
|
||||
if (max!=1) thrM("(rand).Range: 𝕩 cannot be negative");
|
||||
r = allZeroes(am);
|
||||
r = allZeroesFl(am);
|
||||
}
|
||||
} else if (max > (1ULL<<31)) {
|
||||
if (max >= 1LL<<53) thrM("(rand).Range: 𝕩 must be less than 2⋆53");
|
||||
|
||||
@ -5,7 +5,7 @@ B asFill(B x) { // consumes
|
||||
u8 xe = TI(x,elType);
|
||||
usz ia = IA(x);
|
||||
if (elNum(xe)) {
|
||||
B r = taga(arr_shCopy(allZeroes(ia), x));
|
||||
B r = taga(arr_shCopy(allZeroesFl(ia), x));
|
||||
decG(x);
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -189,6 +189,8 @@ B bit_sel(B b, B e0, B e1); // consumes b; b must be bitarr; b⊏e0‿e1
|
||||
|
||||
Arr* allZeroes(usz ia); // ia⥊0 with undefined shape; always produces new array
|
||||
Arr* allOnes(usz ia); // ia⥊1 with undefined shape; always produces new array
|
||||
Arr* allZeroesFl(usz ia); // allZeroes but marked as fl_asc|fl_dsc
|
||||
Arr* allOnesFl(usz ia); // allOnes but marked as fl_asc|fl_dsc
|
||||
|
||||
Arr* reshape_one(usz nia, B x); // nia⥊<x with undefined shape, with fl_asc, fl_dsc, and fl_squoze set; consumes x
|
||||
B i64EachDec(i64 v, B x); // v¨ x; consumes x
|
||||
|
||||
@ -33,6 +33,9 @@
|
||||
NOINLINE Arr* allZeroes(usz ia) { u64* rp; Arr* r = m_bitarrp(&rp, ia); for (usz i = 0; i < BIT_N(ia); i++) rp[i] = 0; return r; }
|
||||
NOINLINE Arr* allOnes (usz ia) { u64* rp; Arr* r = m_bitarrp(&rp, ia); for (usz i = 0; i < BIT_N(ia); i++) rp[i] = ~0ULL; return r; }
|
||||
|
||||
NOINLINE Arr* allZeroesFl(usz ia) { return FLV_SET(allZeroes(ia), fl_asc|fl_dsc|fl_squoze); }
|
||||
NOINLINE Arr* allOnesFl (usz ia) { return FLV_SET(allOnes (ia), fl_asc|fl_dsc|fl_squoze); }
|
||||
|
||||
NOINLINE B bit_sel(B b, B e0, B e1) {
|
||||
u8 t0 = selfElType(e0);
|
||||
u64* bp = bitany_ptr(b);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user