#ifndef __BEE2_U16_H
#define __BEE2_U16_H
#include "bee2/defs.h"
#include "bee2/core/safe.h"
#ifdef __cplusplus
extern "C" {
#endif
#define U16_0 ((u16)0)
#define U16_1 ((u16)1)
#define U16_MAX ((u16)(U16_0 - U16_1))
#define u16RotHi(w, d)\
((u16)((w) << (d) | (w) >> (16 - (d))))
#define u16RotLo(w, d)\
((u16)((w) >> (d) | (w) << (16 - (d))))
u16 u16Rev(
register u16 w
);
void u16Rev2(
u16 buf[],
size_t count
);
u16 u16Bitrev(
register u16 w
);
size_t u16Weight(
register u16 w
);
bool_t u16Parity(
register u16 w
);
size_t u16CTZ(
register u16 w
);
size_t SAFE(u16CTZ)(register u16 w);
size_t FAST(u16CTZ)(register u16 w);
size_t u16CLZ(
register u16 w
);
size_t SAFE(u16CLZ)(register u16 w);
size_t FAST(u16CLZ)(register u16 w);
u16 u16Shuffle(
register u16 w
);
u16 u16Deshuffle(
register u16 w
);
u16 u16NegInv(
register u16 w
);
void u16From(
u16 dest[],
const void* src,
size_t count
);
void u16To(
void* dest,
size_t count,
const u16 src[]
);
#ifdef __cplusplus
}
#endif
#endif