---
-- Bitwise operations on integers.
--
-- Lua does not provide bitwise logical operations. Since they are often useful
-- for low-level network communication, Reuben Thomas' BitLib
-- (http://luaforge.net/projects/bitlib) for Lua has been integrated into NSE.
-- The arguments to the bitwise operation functions should be integers.  The
-- number of bits available for logical operations depends on the data type used
-- to represent Lua numbers. This is typically 8-byte IEEE floats (double),
-- which give 53 bits (the size of the mantissa).
--
-- This implies that the bitwise operations won't work (as expected) for numbers
-- larger than 10^14. You can use them with 32-bit wide numbers without any
-- problems. Operations involving 64-bit wide numbers, however, may not return
-- the expected result.
--
-- The logical operations start with "b" to avoid
-- clashing with reserved words; although <code>xor</code> isn't a
-- reserved word, it seemed better to use <code>bxor</code> for
-- consistency.
--
-- @author Reuben Thomas
-- @copyright BSD License

module "bit"

--- Returns the one's complement of <code>a</code>.
-- @param a Number.
-- @return The one's complement of <code>a</code>.
function bnot(a)

--- Returns the bitwise and of all its arguments.
-- @param ... A variable number of Numbers to and.
-- @return The anded result.
function band(...)

--- Returns the bitwise or of all its arguments.
-- @param ... A variable number of Numbers to or.
-- @return The ored result.
function bor(...)

--- Returns the bitwise exclusive or of all its arguments.
-- @param ... A variable number of Numbers to exclusive or.
-- @return The exclusive ored result.
function bxor(...)

--- Returns <code>a</code> left-shifted by <code>b</code> places.
-- @param a Number to perform the shift on.
-- @param b Number of shifts.
function lshift(a, b)

--- Returns <code>a</code> right-shifted by <code>b</code> places.
-- @param a Number to perform the shift on.
-- @param b Number of shifts.
function rshift(a, b)

--- Returns <code>a</code> arithmetically right-shifted by <code>b</code>
-- places.
-- @param a Number to perform the shift on.
-- @param b Number of shifts.
function arshift(a, b)

--- Returns the integer remainder of <code>a</code> divided by <code>b</code>.
-- @param a Dividend.
-- @param b Divisor.
function mod(a, b)