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