/*-------------------------------------------------------------*/
/***************************************************************
* Type netwib_uint64, can be represented as: *
* - a 64 bit integer *
* - a structure containing two 32 bit integers *
* In the first case, math operations are supported by the *
* compiler. *
* In the second case, following functions are needed. *
***************************************************************/
/*-------------------------------------------------------------*/
netwib_err netwib_uint64_init_uint32(netwib_uint32 in,
netwib_uint64 *pout);
netwib_err netwib_uint64_init_uintmax(netwib_uintmax in,
netwib_uint64 *pout);
netwib_err netwib_uint64_init_uintptr(netwib_uintptr in,
netwib_uint64 *pout);
netwib_err netwib_int64_init_int32(netwib_int32 in,
netwib_int64 *pout);
netwib_err netwib_int64_init_intmax(netwib_intmax in,
netwib_int64 *pout);
netwib_err netwib_int64_init_intptr(netwib_intptr in,
netwib_int64 *pout);
netwib_err netwib_uint32_init_uint64(netwib_uint64 in,
netwib_uint32 *pout);
netwib_err netwib_uintmax_init_uint64(netwib_uint64 in,
netwib_uintmax *pout);
netwib_err netwib_uintptr_init_uint64(netwib_uint64 in,
netwib_uintptr *pout);
netwib_err netwib_int32_init_int64(netwib_int64 in,
netwib_int32 *pout);
netwib_err netwib_intmax_init_int64(netwib_int64 in,
netwib_intmax *pout);
netwib_err netwib_intptr_init_int64(netwib_int64 in,
netwib_intptr *pout);
/*-------------------------------------------------------------*/
netwib_err netwib_uint64_init_int64(netwib_int64 in,
netwib_uint64 *pout);
netwib_err netwib_int64_init_uint64(netwib_uint64 in,
netwib_int64 *pout);
/*-------------------------------------------------------------*/
netwib_err netwib_uint64_add(netwib_uint64 a,
netwib_uint64 b,
netwib_uint64 *paplusb);
#define netwib_int64_add(a,b,paplusb) netwib_uint64_add(a,b,paplusb)
netwib_err netwib_uint64_sub(netwib_uint64 a,
netwib_uint64 b,
netwib_uint64 *paminusb);
#define netwib_int64_sub(a,b,paminusb) netwib_uint64_sub(a,b,paminusb)
netwib_err netwib_uint64_mul(netwib_uint64 a,
netwib_uint64 b,
netwib_uint64 *pamulb);
#define netwib_int64_mul(a,b,pamulb) netwib_uint64_mul(a,b,pamulb)
netwib_err netwib_uint64_div(netwib_uint64 n,
netwib_uint64 d,
netwib_uint64 *pq,
netwib_uint64 *pr);
netwib_err netwib_int64_div(netwib_int64 n,
netwib_int64 d,
netwib_int64 *pq,
netwib_int64 *pr);
/*-------------------------------------------------------------*/
netwib_err netwib_uint64_inc(netwib_uint64 *pui);
#define netwib_int64_inc(pui) netwib_uint64_inc(pui)
netwib_err netwib_uint64_dec(netwib_uint64 *pui);
#define netwib_int64_dec(pui) netwib_uint64_dec(pui)
/*-------------------------------------------------------------*/
netwib_err netwib_uint64_cmp(netwib_uint64 a,
netwib_uint64 b,
netwib_cmp *pcmp);
netwib_err netwib_int64_cmp(netwib_int64 a,
netwib_int64 b,
netwib_cmp *pcmp);
/*-------------------------------------------------------------*/
netwib_err netwib_int64_neg(netwib_int64 a,
netwib_int64 *pnega);
/*-------------------------------------------------------------*/
netwib_err netwib_uint64_shl(netwib_uint64 a,
netwib_uint32 b,
netwib_uint64 *pashlb);
netwib_err netwib_uint64_shr(netwib_uint64 a,
netwib_uint32 b,
netwib_uint64 *pashrb);
netwib_err netwib_uint64_and(netwib_uint64 a,
netwib_uint64 b,
netwib_uint64 *paandb);
netwib_err netwib_uint64_or(netwib_uint64 a,
netwib_uint64 b,
netwib_uint64 *paorb);
netwib_err netwib_uint64_xor(netwib_uint64 a,
netwib_uint64 b,
netwib_uint64 *paxorb);
netwib_err netwib_uint64_not(netwib_uint64 a,
netwib_uint64 *pnot);
/*-------------------------------------------------------------*/
/* To represent values > 0xFFFFFFFF :
- some Unixes (Solaris, HP-UX) need 0xf....fLL
- Windows does not support LL
*/
#if defined NETWIBDEF_SYSNAME_Unix
#define NETWIB_INT_LL(x) (x ## LL)
#define NETWIB_UINT_LL(x) (x ## LLU)
#elif defined NETWIBDEF_SYSNAME_Windows
#define NETWIB_INT_LL(x) (x)
#define NETWIB_UINT_LL(x) (x)
#else
#error "Unknown value for NETWIBDEF_SYSNAME"
#endif