main index

section index




/*-------------------------------------------------------------*/
/***************************************************************
 * 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





main index

section index