Digi XBee(R) ANSI C Host Library
Files | Macros | Typedefs | Functions
64-bit integer support

Files

file  zcl64.h
 Macros for working with 64-bit integers via the zcl64_t datatype.
 
file  jslong.c
 

Macros

#define ZCL64_INIT(hi, lo)   JSLL_INIT(hi, lo)
 Initialize a zcl64_t variable with two literal 32-bit values. More...
 
#define ZCL64_LOAD(r, hi32, lo32)   ((r).hi = (hi32), (r).lo = (lo32))
 Load a zcl64_t variable with two 32-bit values (high and low). More...
 
#define ZCL64_IS_ZERO(a)   JSLL_IS_ZERO(a)
 Compare a zcl64_t variable to zero. More...
 
#define ZCL64_EQ(a, b)   JSLL_EQ(a, b)
 Compare two zcl64_t variables for equality. More...
 
#define ZCL64_NE(a, b)   JSLL_NE(a, b)
 Compare two zcl64_t variables for inequality. More...
 
#define ZCL64_GE_ZERO(a)   JSLL_GE_ZERO(a)
 Compare a signed zcl64_t variable to 0. More...
 
#define ZCL64_LT(a, b)   JSLL_REAL_CMP(a, <, b)
 Compare two zcl64_t variables (signed less-than comparison) More...
 
#define ZCL64_LTU(a, b)   JSLL_REAL_UCMP(a, <, b)
 Compare two zcl64_t variables (unsigned less-than comparison) More...
 
#define ZCL64_AND(r, a, b)   JSLL_AND(r, a, b)
 Perform a bitwise AND of two zcl64_t variables. More...
 
#define ZCL64_OR(r, a, b)   JSLL_OR(r, a, b)
 Perform a bitwise OR of two zcl64_t variables. More...
 
#define ZCL64_XOR(r, a, b)   JSLL_XOR(r, a, b)
 Perform a bitwise XOR of two zcl64_t variables. More...
 
#define ZCL64_NOT(r, a)   JSLL_NOT(r, a)
 Perform a bitwise NOT of a zcl64_t variable. More...
 
#define ZCL64_NEG(r, a)   JSLL_NEG(r, a)
 Negate a zcl64_t variable. More...
 
#define ZCL64_ADD(r, a, b)   JSLL_ADD(r, a, b)
 Add two zcl64_t variables. More...
 
#define ZCL64_SUB(r, a, b)   JSLL_SUB(r, a, b)
 Subtract two zcl64_t variables. More...
 
#define ZCL64_MUL(r, a, b)   JSLL_MUL(r, a, b)
 Multiply two zcl64_t variables. More...
 
#define ZCL64_MUL32(r, a, b)   JSLL_MUL32(r, a, b)
 Multiply two 32-bit variables (int32_t or uint32_t) and store the result in a zcl64_t variable. More...
 
#define ZCL64_UDIVMOD(qp, rp, a, b)   JSLL_UDIVMOD(qp, rp, a, b)
 Divide an unsigned zcl64_t variable by another unsigned zcl64_t variable and store the 64-bit quotient and remainder. More...
 
#define ZCL64_DIV(r, a, b)   JSLL_DIV(r, a, b)
 Perform signed division of two zcl64_t variables and store the quotient. More...
 
#define ZCL64_MOD(r, a, b)   JSLL_MOD(r, a, b)
 Perform signed division of two zcl64_t variables and store the remainder. More...
 
#define ZCL64_ASL(r, a, b)   JSLL_SHL(r, a, b)
 Arithmetic Shift Left of a zcl64_t variable. More...
 
#define ZCL64_LSL(r, a, b)   ZCL64_SLA(r, a, b)
 Logical Shift Left of a zcl64_t variable. More...
 
#define ZCL64_ASR(r, a, b)   JSLL_SHR(r, a, b)
 Arithmetic Shift Right of a signed zcl64_t variable. More...
 
#define ZCL64_LSR(r, a, b)   JSLL_USHR(r, a, b)
 Logical Shift Right of an unsigned zcl64_t variable. More...
 
#define ZCL64_TO_INT32(i32, i64)   JSLL_L2I(i32, i64)
 Cast a signed zcl64_t variable down to a signed 32-bit integer. More...
 
#define ZCL64_TO_UINT32(u32, u64)   JSLL_L2UI(u32, u64)
 Cast an unsigned zcl64_t variable down to an unsigned 32-bit integer. More...
 
#define ZCL64_LOW32(u64)   ((u64).lo)
 The lower-32 bits of a ZCL64 value. More...
 
#define ZCL64_HIGH32(u64)   ((u64).hi)
 The upper-32 bits of a ZCL64 value. More...
 
#define ZCL64_TO_FLOAT(f, i64)   JSLL_L2F(f, i64)
 Cast a signed zcl64_t variable to a float. More...
 
#define ZCL64_TO_DOUBLE(d, i64)   JSLL_L2D(d, i64)
 Cast a signed zcl64_t variable to a double. More...
 
#define ZCL64_FROM_INT32(i64, i32)   JSLL_I2L(i64, i32)
 Cast a signed 32-bit integer up to a zcl64_t variable. More...
 
#define ZCL64_FROM_UINT32(u64, u32)   JSLL_UI2L(u64, u32)
 Cast an unsigned 32-bit integer up to a zcl64_t variable. More...
 
#define ZCL64_FROM_FLOAT(i64, f)   JSLL_F2L(i64, f)
 Cast a double into a signed zcl64_t variable. More...
 
#define ZCL64_FROM_DOUBLE(i64, d)   JSLL_D2L(i64, d)
 Cast a float into a signed zcl64_t variable. More...
 
#define ZCL64_TO_HEXSTR(buffer, var)   JSLL_HEXSTR(buffer, var)
 Convert a zcl64_t variable to a 16-character printable hexadecimal string. More...
 
#define ZCL64_TO_DECSTR(buffer, var)   JSLL_DECSTR(buffer, var)
 Convert a signed zcl64_t variable to a 20-character printable decimal string. More...
 
#define ZCL64_TO_UDECSTR(buffer, var)   JSLL_UDECSTR(buffer, var)
 Convert an unsigned zcl64_t variable to a 20-character printable decimal string. More...
 
#define jslo16(a)   ((a) & 0x0000FFFF)
 
#define jshi16(a)   ((uint32_t)(a) >> 16)
 

Typedefs

typedef JSUint64 zcl64_t
 64-bit integer in host-byte-order Use for 56-bit values as well – ZCL layer will make sure top byte is sign-extended. More...
 

Functions

void jsll_mul (JSUint64 *rp, JSUint64 a, JSUint64 b)
 
void jsll_mul32 (JSUint64 *rp, JSUint32 a, JSUint32 b)
 
void jsll_udivmod (JSUint64 *qp, JSUint64 *rp, JSUint64 a, JSUint64 b)
 
void jsll_div (JSUint64 *r, const JSUint64 *a, const JSUint64 *b)
 
void jsll_mod (JSUint64 *r, const JSUint64 *a, const JSUint64 *b)
 
void jsll_shl (JSUint64 *r, JSUint64 a, uint_fast8_t b)
 
void jsll_shr (JSInt64 *r, JSInt64 a, uint_fast8_t b)
 
void jsll_ushr (JSInt64 *r, JSInt64 a, uint_fast8_t b)
 
int jsll_decstr (char *buffer, const JSInt64 *v)
 
int jsll_udecstr (char *buffer, const JSUint64 *v)
 

Detailed Description

Macro Definition Documentation

#define ZCL64_ADD (   r,
  a,
 
)    JSLL_ADD(r, a, b)

Add two zcl64_t variables.

Parameters
[out]rzcl64_t variable to assign (a + b) to
[in]azcl64_t variable
[in]bzcl64_t variable
See also
ZCL64_SUB, ZCL64_MUL, ZCL64_MUL32, ZCL64_UDIVMOD, ZCL64_DIV, ZCL64_MOD
#define ZCL64_AND (   r,
  a,
 
)    JSLL_AND(r, a, b)

Perform a bitwise AND of two zcl64_t variables.

Parameters
[out]rzcl64_t variable to assign (a & b) to
[in]azcl64_t variable
[in]bzcl64_t variable
See also
ZCL64_OR, ZCL64_XOR, ZCL64_NOT, ZCL64_NEG
#define ZCL64_ASL (   r,
  a,
 
)    JSLL_SHL(r, a, b)

Arithmetic Shift Left of a zcl64_t variable.

Shifts bits of a left by positions, inserting zeros on the right. Equivalent to ZCL64_LSL.

Parameters
[out]rzcl64_t variable to assign (a << b) to
[in]azcl64_t variable
[in]bintegral value from 0 to 63
See also
ZCL64_LSL, ZCL64_ASR, ZCL64_LSR
#define ZCL64_ASR (   r,
  a,
 
)    JSLL_SHR(r, a, b)

Arithmetic Shift Right of a signed zcl64_t variable.

Shifts bits of a right by positions, extending the sign bit on the left.

Parameters
[out]rsigned zcl64_t variable to assign (a >> b) to
[in]asigned zcl64_t variable
[in]bintegral value from 0 to 63
See also
ZCL64_ASL, ZCL64_LSL, ZCL64_LSR
#define ZCL64_DIV (   r,
  a,
 
)    JSLL_DIV(r, a, b)

Perform signed division of two zcl64_t variables and store the quotient.

Parameters
[out]rsigned zcl64_t variable to assign (a / b) to
[in]asigned zcl64_t variable
[in]bsigned zcl64_t variable
See also
ZCL64_ADD, ZCL64_SUB, ZCL64_MUL, ZCL64_MUL32, ZCL64_UDIVMOD, ZCL64_MOD
#define ZCL64_EQ (   a,
 
)    JSLL_EQ(a, b)

Compare two zcl64_t variables for equality.

Parameters
[in]azcl64_t variable
[in]bzcl64_t variable
Returns
(a == b)
See also
ZCL64_IS_ZERO, ZCL64_NE, ZCL64_GE_ZERO, ZCL64_CMP, ZCL64_UCMP
#define ZCL64_FROM_DOUBLE (   i64,
 
)    JSLL_D2L(i64, d)

Cast a float into a signed zcl64_t variable.

Parameters
[out]i64signed zcl64_t variable to cast d into
[in]ddouble variable/value
See also
ZCL64_TO_INT32, ZCL64_TO_UINT32, ZCL64_TO_FLOAT, ZCL64_TO_DOUBLE, ZCL64_FROM_INT32, ZCL64_FROM_UINT32, ZCL64_FROM_FLOAT
#define ZCL64_FROM_FLOAT (   i64,
 
)    JSLL_F2L(i64, f)

Cast a double into a signed zcl64_t variable.

Parameters
[out]i64signed zcl64_t variable to cast f into
[in]ffloat variable/value
See also
ZCL64_TO_INT32, ZCL64_TO_UINT32, ZCL64_TO_FLOAT, ZCL64_TO_DOUBLE, ZCL64_FROM_INT32, ZCL64_FROM_UINT32, ZCL64_FROM_DOUBLE
#define ZCL64_FROM_INT32 (   i64,
  i32 
)    JSLL_I2L(i64, i32)

Cast a signed 32-bit integer up to a zcl64_t variable.

Parameters
[out]i64signed zcl64_t variable to cast i32 into
[in]i32int32_t variable
See also
ZCL64_TO_INT32, ZCL64_TO_UINT32, ZCL64_TO_FLOAT, ZCL64_TO_DOUBLE, ZCL64_FROM_UINT32, ZCL64_FROM_FLOAT, ZCL64_FROM_DOUBLE
#define ZCL64_FROM_UINT32 (   u64,
  u32 
)    JSLL_UI2L(u64, u32)

Cast an unsigned 32-bit integer up to a zcl64_t variable.

Parameters
[out]u64unsigned zcl64_t variable to cast u32 into
[in]u32uint32_t variable
See also
ZCL64_TO_INT32, ZCL64_TO_UINT32, ZCL64_TO_FLOAT, ZCL64_TO_DOUBLE, ZCL64_FROM_INT32, ZCL64_FROM_FLOAT, ZCL64_FROM_DOUBLE
#define ZCL64_GE_ZERO (   a)    JSLL_GE_ZERO(a)

Compare a signed zcl64_t variable to 0.

Parameters
[in]asigned zcl64_t variable
Returns
(a >= 0)
See also
ZCL64_IS_ZERO, ZCL64_EQ, ZCL64_NE, ZCL64_CMP, ZCL64_UCMP
#define ZCL64_HIGH32 (   u64)    ((u64).hi)

The upper-32 bits of a ZCL64 value.

Parameters
[in]u64unsigned zcl64_t variable
#define ZCL64_INIT (   hi,
  lo 
)    JSLL_INIT(hi, lo)

Initialize a zcl64_t variable with two literal 32-bit values.

Note that this macro is only valid as an initializer in a variable declaration. Use ZCL64_LOAD in general program statements.

Parameters
[in]hiupper 32 bits
[in]lolower 32 bits
Returns
an initializer for a zcl64_t variable
See also
ZCL64_LOAD
#define ZCL64_IS_ZERO (   a)    JSLL_IS_ZERO(a)

Compare a zcl64_t variable to zero.

Parameters
[in]azcl64_t variable
Returns
(a == 0)
See also
ZCL64_EQ, ZCL64_NE, ZCL64_GE_ZERO, ZCL64_CMP, ZCL64_UCMP
#define ZCL64_LOAD (   r,
  hi32,
  lo32 
)    ((r).hi = (hi32), (r).lo = (lo32))

Load a zcl64_t variable with two 32-bit values (high and low).

Parameters
[out]rzcl64_t variable to assign (hi << 32 + lo) to
[in]hi32upper 32 bits to load into
r
[in]lo32lower 32 bits to load into
r
See also
ZCL64_INIT
#define ZCL64_LOW32 (   u64)    ((u64).lo)

The lower-32 bits of a ZCL64 value.

Parameters
[in]u64unsigned zcl64_t variable
#define ZCL64_LSL (   r,
  a,
 
)    ZCL64_SLA(r, a, b)

Logical Shift Left of a zcl64_t variable.

Shifts bits of a left by positions, inserting zeros on the right. Equivalent to ZCL64_ASL.

Parameters
[out]rzcl64_t variable to assign (a << b) to
[in]azcl64_t variable
[in]bintegral value from 0 to 63
See also
ZCL64_ASL, ZCL64_ASR, ZCL64_LSR
#define ZCL64_LSR (   r,
  a,
 
)    JSLL_USHR(r, a, b)

Logical Shift Right of an unsigned zcl64_t variable.

Shifts bits of a right by positions, inserting zeros on the left.

Parameters
[out]runsigned zcl64_t variable to assign (a >> b) to
[in]aunsigned zcl64_t variable
[in]bintegral value from 0 to 63
See also
ZCL64_ASL, ZCL64_LSL, ZCL64_ASR
#define ZCL64_LT (   a,
 
)    JSLL_REAL_CMP(a, <, b)

Compare two zcl64_t variables (signed less-than comparison)

Parameters
[in]asigned zcl64_t variable
[in]bsigned zcl64_t variable
Returns
(a < b)
See also
ZCL64_IS_ZERO, ZCL64_EQ, ZCL64_NE, ZCL64_GE_ZERO, ZCL64_LT
#define ZCL64_LTU (   a,
 
)    JSLL_REAL_UCMP(a, <, b)

Compare two zcl64_t variables (unsigned less-than comparison)

Parameters
[in]aunsigned zcl64_t variable
[in]bunsigned zcl64_t variable
Returns
(a < b)
See also
ZCL64_IS_ZERO, ZCL64_EQ, ZCL64_NE, ZCL64_GE_ZERO, ZCL64_LTU
#define ZCL64_MOD (   r,
  a,
 
)    JSLL_MOD(r, a, b)

Perform signed division of two zcl64_t variables and store the remainder.

Parameters
[out]rzcl64_t variable to assign (a + b) to
[in]azcl64_t variable
[in]bzcl64_t variable
See also
ZCL64_ADD, ZCL64_SUB, ZCL64_MUL, ZCL64_MUL32, ZCL64_UDIVMOD, ZCL64_DIV
#define ZCL64_MUL (   r,
  a,
 
)    JSLL_MUL(r, a, b)

Multiply two zcl64_t variables.

Parameters
[out]rzcl64_t variable to assign (a * b) to
[in]azcl64_t variable
[in]bzcl64_t variable
See also
ZCL64_ADD, ZCL64_SUB, ZCL64_MUL32, ZCL64_UDIVMOD, ZCL64_DIV, ZCL64_MOD
#define ZCL64_MUL32 (   r,
  a,
 
)    JSLL_MUL32(r, a, b)

Multiply two 32-bit variables (int32_t or uint32_t) and store the result in a zcl64_t variable.

Parameters
[out]rzcl64_t variable to assign (a * b) to
[in]auint32_t variable
[in]buint32_t variable
See also
ZCL64_ADD, ZCL64_SUB, ZCL64_MUL, ZCL64_UDIVMOD, ZCL64_DIV, ZCL64_MOD
#define ZCL64_NE (   a,
 
)    JSLL_NE(a, b)

Compare two zcl64_t variables for inequality.

Parameters
[in]azcl64_t variable
[in]bzcl64_t variable
Returns
(a != b)
See also
ZCL64_IS_ZERO, ZCL64_EQ, ZCL64_GE_ZERO, ZCL64_CMP, ZCL64_UCMP
#define ZCL64_NEG (   r,
 
)    JSLL_NEG(r, a)

Negate a zcl64_t variable.

Parameters
[out]rzcl64_t variable to assign (-a) to
[in]azcl64_t variable
See also
ZCL64_AND, ZCL64_OR, ZCL64_XOR, ZCL64_NOT
#define ZCL64_NOT (   r,
 
)    JSLL_NOT(r, a)

Perform a bitwise NOT of a zcl64_t variable.

Parameters
[out]rzcl64_t variable to assign (~a) to
[in]azcl64_t variable
See also
ZCL64_AND, ZCL64_OR, ZCL64_XOR, ZCL64_NEG
#define ZCL64_OR (   r,
  a,
 
)    JSLL_OR(r, a, b)

Perform a bitwise OR of two zcl64_t variables.

Parameters
[out]rzcl64_t variable to assign (a | b) to
[in]azcl64_t variable
[in]bzcl64_t variable
See also
ZCL64_AND, ZCL64_XOR, ZCL64_NOT, ZCL64_NEG
#define ZCL64_SUB (   r,
  a,
 
)    JSLL_SUB(r, a, b)

Subtract two zcl64_t variables.

Parameters
[out]rzcl64_t variable to assign (a - b) to
[in]azcl64_t variable
[in]bzcl64_t variable
See also
ZCL64_ADD, ZCL64_MUL, ZCL64_MUL32, ZCL64_UDIVMOD, ZCL64_DIV, ZCL64_MOD
#define ZCL64_TO_DECSTR (   buffer,
  var 
)    JSLL_DECSTR(buffer, var)

Convert a signed zcl64_t variable to a 20-character printable decimal string.

Parameters
[out]buffer21-character buffer to hold hexadecimal string
[in]varsigned zcl64_t variable to stringify
Returns
number of characters written to buffer (1 to 20), in addition to the null terminator
See also
ZCL64_TO_HEXSTR, ZCL64_TO_UDECSTR
#define ZCL64_TO_DOUBLE (   d,
  i64 
)    JSLL_L2D(d, i64)

Cast a signed zcl64_t variable to a double.

Parameters
[out]ddouble variable to cast i64 into
[in]i64signed zcl64_t variable
See also
ZCL64_TO_INT32, ZCL64_TO_UINT32, ZCL64_TO_FLOAT, ZCL64_FROM_INT32, ZCL64_FROM_UINT32, ZCL64_FROM_FLOAT, ZCL64_FROM_DOUBLE
#define ZCL64_TO_FLOAT (   f,
  i64 
)    JSLL_L2F(f, i64)

Cast a signed zcl64_t variable to a float.

Parameters
[out]ffloat variable to cast i64 into
[in]i64signed zcl64_t variable
See also
ZCL64_TO_INT32, ZCL64_TO_UINT32, ZCL64_TO_DOUBLE, ZCL64_FROM_INT32, ZCL64_FROM_UINT32, ZCL64_FROM_FLOAT, ZCL64_FROM_DOUBLE,
#define ZCL64_TO_HEXSTR (   buffer,
  var 
)    JSLL_HEXSTR(buffer, var)

Convert a zcl64_t variable to a 16-character printable hexadecimal string.

Parameters
[out]buffer17-character buffer to hold hexadecimal string
[in]varzcl64_t variable to stringify
Return values
16this function always returns 16, the number of characters written to buffer (in addition to the null terminator)
See also
ZCL64_TO_DECSTR, ZCL64_TO_UDECSTR
#define ZCL64_TO_INT32 (   i32,
  i64 
)    JSLL_L2I(i32, i64)

Cast a signed zcl64_t variable down to a signed 32-bit integer.

Parameters
[out]i32int32_t variable to cast i64 into
[in]i64signed zcl64_t variable
See also
ZCL64_TO_UINT32, ZCL64_TO_FLOAT, ZCL64_TO_DOUBLE, ZCL64_FROM_INT32, ZCL64_FROM_UINT32, ZCL64_FROM_FLOAT, ZCL64_FROM_DOUBLE
#define ZCL64_TO_UDECSTR (   buffer,
  var 
)    JSLL_UDECSTR(buffer, var)

Convert an unsigned zcl64_t variable to a 20-character printable decimal string.

Parameters
[out]buffer21-character buffer to hold hexadecimal string
[in]varunsigned zcl64_t variable to stringify
Returns
number of characters written to buffer (1 to 20), in addition to the null terminator
See also
ZCL64_TO_HEXSTR, ZCL64_TO_DECSTR
#define ZCL64_TO_UINT32 (   u32,
  u64 
)    JSLL_L2UI(u32, u64)

Cast an unsigned zcl64_t variable down to an unsigned 32-bit integer.

Parameters
[out]u32uint32_t variable to cast u64 into
[in]u64unsigned zcl64_t variable
See also
ZCL64_TO_INT32, ZCL64_TO_FLOAT, ZCL64_TO_DOUBLE, ZCL64_FROM_INT32, ZCL64_FROM_UINT32, ZCL64_FROM_FLOAT, ZCL64_FROM_DOUBLE
#define ZCL64_UDIVMOD (   qp,
  rp,
  a,
 
)    JSLL_UDIVMOD(qp, rp, a, b)

Divide an unsigned zcl64_t variable by another unsigned zcl64_t variable and store the 64-bit quotient and remainder.

Parameters
[out]qpNULL to ignore the quotient, or address of a zcl64_t variable to assign (a / b) to
[out]rpNULL to ignore the remainder, or address of a zcl64_t variable to assign (a % b) to
[in]azcl64_t variable
[in]bzcl64_t variable
See also
ZCL64_ADD, ZCL64_SUB, ZCL64_MUL, ZCL64_MUL32, ZCL64_DIV, ZCL64_MOD
#define ZCL64_XOR (   r,
  a,
 
)    JSLL_XOR(r, a, b)

Perform a bitwise XOR of two zcl64_t variables.

Parameters
[out]rzcl64_t variable to assign (a ^ b) to
[in]azcl64_t variable
[in]bzcl64_t variable
See also
ZCL64_AND, ZCL64_OR, ZCL64_NOT, ZCL64_NEG

Typedef Documentation

typedef JSUint64 zcl64_t

64-bit integer in host-byte-order Use for 56-bit values as well – ZCL layer will make sure top byte is sign-extended.

Todo:
Actually code up support for 56-bit values like we did for 24 bit.