Use scan_max_num for sorted ⊒
This commit is contained in:
parent
1924aee61c
commit
98d066c343
@ -102,16 +102,17 @@ B scan_add_bool(B x, u64 ia) { // consumes x
|
||||
#endif
|
||||
#define MM_CASE(T,N,C,I) \
|
||||
case el_##T : { T* xp=T##any_ptr(x); T* rp; r=m_##T##arrv(&rp, ia); MINMAX_SCAN(T,N,C,I); break; }
|
||||
#define MINMAX(NAME,C,INIT,ORD) \
|
||||
B r; switch (xe) { default:UD; \
|
||||
MM_CASE(i8 ,NAME,C,I8_##INIT ) \
|
||||
MM_CASE(i16,NAME,C,I16_##INIT) \
|
||||
MM_CASE(i32,NAME,C,I32_##INIT) \
|
||||
MM_CASE(f64,NAME,C,F64_##INIT) \
|
||||
} \
|
||||
#define MINMAX(NAME,C,INIT,BIT,ORD) \
|
||||
B r; switch (xe) { default:UD; \
|
||||
case el_bit: return scan_##BIT(x, ia); \
|
||||
MM_CASE(i8 ,NAME,C,I8_##INIT ) \
|
||||
MM_CASE(i16,NAME,C,I16_##INIT) \
|
||||
MM_CASE(i32,NAME,C,I32_##INIT) \
|
||||
MM_CASE(f64,NAME,C,F64_##INIT) \
|
||||
} \
|
||||
decG(x); return FL_SET(r, fl_##ORD);
|
||||
static B scan_min_num(B x, u8 xe, usz ia) { MINMAX(min,<,MAX,dsc) }
|
||||
static B scan_max_num(B x, u8 xe, usz ia) { MINMAX(max,>,MIN,asc) }
|
||||
B scan_min_num(B x, u8 xe, usz ia) { MINMAX(min,<,MAX,and,dsc) }
|
||||
B scan_max_num(B x, u8 xe, usz ia) { MINMAX(max,>,MIN,or ,asc) }
|
||||
#undef MM_CASE
|
||||
#undef MINMAX
|
||||
#undef MINMAX_SCAN
|
||||
|
||||
@ -38,11 +38,11 @@
|
||||
extern B not_c1(B, B);
|
||||
extern B shape_c1(B, B);
|
||||
extern B slash_c2(B, B, B);
|
||||
extern B scan_c1(Md1D*, B);
|
||||
extern B ud_c1(B, B);
|
||||
extern B sub_c2(B, B, B);
|
||||
extern B mul_c2(B, B, B);
|
||||
extern B scan_add_bool(B x, u64 ia);
|
||||
extern B scan_max_num(B x, u8 xe, u64 ia);
|
||||
|
||||
// These hashes are stored in tables and must be invertible!
|
||||
#if defined(__SSE4_2__)
|
||||
@ -327,8 +327,8 @@ B count_c1(B t, B x) {
|
||||
if (use_sorted(x, lw) && n>16 && (lw>4 || n<1<<16)) { // ↕∘≠(⊣-⌈`∘×)∊
|
||||
B c = shift_ne(x, n, lw, 1);
|
||||
B i = C1(ud, m_f64(n));
|
||||
B m = M1C1(scan, ceil, C2(mul, c, inc(i)));
|
||||
return C2(sub, i, m);
|
||||
B m = C2(mul, c, inc(i));
|
||||
return C2(sub, i, scan_max_num(m, TI(m,elType), n));
|
||||
}
|
||||
void* xv = tyany_ptr(x);
|
||||
#define BRUTE(T) \
|
||||
|
||||
Loading…
Reference in New Issue
Block a user