Some checks failed
		
		
	
	Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
				
			Detach Plugins / check (GitHub.vim) (push) Has been cancelled
				
			Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
				
			Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
				
			Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
				
			Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
				
			Detach Plugins / check (git.vim) (push) Has been cancelled
				
			Detach Plugins / check (iedit.vim) (push) Has been cancelled
				
			Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
				
			Detach Plugins / check (vim-chat) (push) Has been cancelled
				
			Detach Plugins / check (vim-cheat) (push) Has been cancelled
				
			Detach Plugins / check (vim-todo) (push) Has been cancelled
				
			Detach Plugins / check (xmake.vim) (push) Has been cancelled
				
			test / Linux (nvim, nightly) (push) Has been cancelled
				
			test / Linux (nvim, v0.3.8) (push) Has been cancelled
				
			test / Linux (nvim, v0.4.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.4.2) (push) Has been cancelled
				
			test / Linux (nvim, v0.4.3) (push) Has been cancelled
				
			test / Linux (nvim, v0.4.4) (push) Has been cancelled
				
			test / Linux (nvim, v0.5.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.5.1) (push) Has been cancelled
				
			test / Linux (nvim, v0.6.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.6.1) (push) Has been cancelled
				
			test / Linux (nvim, v0.7.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.7.2) (push) Has been cancelled
				
			test / Linux (nvim, v0.8.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.8.1) (push) Has been cancelled
				
			test / Linux (nvim, v0.8.2) (push) Has been cancelled
				
			test / Linux (nvim, v0.8.3) (push) Has been cancelled
				
			test / Linux (nvim, v0.9.0) (push) Has been cancelled
				
			test / Linux (nvim, v0.9.1) (push) Has been cancelled
				
			test / Linux (true, vim, v7.4.052) (push) Has been cancelled
				
			test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
				
			test / Linux (true, vim, v7.4.629) (push) Has been cancelled
				
			test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
				
			test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
				
			test / Linux (vim, nightly) (push) Has been cancelled
				
			test / Linux (vim, v8.0.0184) (push) Has been cancelled
				
			test / Linux (vim, v8.0.1453) (push) Has been cancelled
				
			test / Linux (vim, v8.1.2269) (push) Has been cancelled
				
			test / Linux (vim, v8.2.2434) (push) Has been cancelled
				
			test / Linux (vim, v8.2.3995) (push) Has been cancelled
				
			test / Windows (nvim, nightly) (push) Has been cancelled
				
			test / Windows (nvim, v0.3.8) (push) Has been cancelled
				
			test / Windows (nvim, v0.4.2) (push) Has been cancelled
				
			test / Windows (nvim, v0.4.3) (push) Has been cancelled
				
			test / Windows (nvim, v0.4.4) (push) Has been cancelled
				
			test / Windows (nvim, v0.5.0) (push) Has been cancelled
				
			test / Windows (nvim, v0.5.1) (push) Has been cancelled
				
			test / Windows (nvim, v0.6.0) (push) Has been cancelled
				
			test / Windows (nvim, v0.6.1) (push) Has been cancelled
				
			test / Windows (nvim, v0.7.0) (push) Has been cancelled
				
			test / Windows (nvim, v0.7.2) (push) Has been cancelled
				
			test / Windows (nvim, v0.8.0) (push) Has been cancelled
				
			test / Windows (nvim, v0.8.1) (push) Has been cancelled
				
			test / Windows (nvim, v0.8.2) (push) Has been cancelled
				
			test / Windows (nvim, v0.8.3) (push) Has been cancelled
				
			test / Windows (nvim, v0.9.0) (push) Has been cancelled
				
			test / Windows (nvim, v0.9.1) (push) Has been cancelled
				
			test / Windows (vim, nightly) (push) Has been cancelled
				
			test / Windows (vim, v7.4.1185) (push) Has been cancelled
				
			test / Windows (vim, v7.4.1689) (push) Has been cancelled
				
			test / Windows (vim, v8.0.0027) (push) Has been cancelled
				
			test / Windows (vim, v8.0.1453) (push) Has been cancelled
				
			test / Windows (vim, v8.1.2269) (push) Has been cancelled
				
			test / Windows (vim, v8.2.2434) (push) Has been cancelled
				
			test / Windows (vim, v8.2.3995) (push) Has been cancelled
				
			docker / docker (push) Has been cancelled
				
			mirror / check (coding) (push) Has been cancelled
				
			mirror / check (gitee) (push) Has been cancelled
				
			mirror / check (gitlab) (push) Has been cancelled
				
			
		
			
				
	
	
		
			342 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			342 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
-- Shortcircuit to returning bit if it already exists
 | 
						|
if bit then return bit end
 | 
						|
 | 
						|
--[[
 | 
						|
 | 
						|
Credit: https://github.com/davidm/lua-bit-numberlua/blob/master/lmod/bit/numberlua.lua
 | 
						|
 | 
						|
LUA MODULE
 | 
						|
 | 
						|
  bit.numberlua - Bitwise operations implemented in pure Lua as numbers,
 | 
						|
    with Lua 5.2 'bit32' and (LuaJIT) LuaBitOp 'bit' compatibility interfaces.
 | 
						|
 | 
						|
SYNOPSIS
 | 
						|
 | 
						|
  local bit = require 'bit.numberlua'
 | 
						|
  print(bit.band(0xff00ff00, 0x00ff00ff)) --> 0xffffffff
 | 
						|
 | 
						|
  -- Interface providing strong (LuaJIT) LuaBitOp 'bit' compatibility
 | 
						|
  local bit = require 'plenary.bit'
 | 
						|
  assert(bit.tobit(0xffffffff) == -1)
 | 
						|
 | 
						|
  REMOVED!
 | 
						|
  -- Interface providing strong Lua 5.2 'bit32' compatibility
 | 
						|
  local bit32 = require 'bit.numberlua'.bit32
 | 
						|
  assert(bit32.band(-1) == 0xffffffff)
 | 
						|
 | 
						|
 | 
						|
DESCRIPTION
 | 
						|
 | 
						|
  This library implements bitwise operations entirely in Lua.
 | 
						|
  This module is typically intended if for some reasons you don't want
 | 
						|
  to or cannot  install a popular C based bit library like BitOp 'bit' [1]
 | 
						|
  (which comes pre-installed with LuaJIT) or 'bit32' (which comes
 | 
						|
  pre-installed with Lua 5.2) but want a similar interface.
 | 
						|
 | 
						|
  This modules represents bit arrays as non-negative Lua numbers. [1]
 | 
						|
  It can represent 32-bit bit arrays when Lua is compiled
 | 
						|
  with lua_Number as double-precision IEEE 754 floating point.
 | 
						|
 | 
						|
  The module is nearly the most efficient it can be but may be a few times
 | 
						|
  slower than the C based bit libraries and is orders or magnitude
 | 
						|
  slower than LuaJIT bit operations, which compile to native code.  Therefore,
 | 
						|
  this library is inferior in performane to the other modules.
 | 
						|
 | 
						|
  The `xor` function in this module is based partly on Roberto Ierusalimschy's
 | 
						|
  post in http://lua-users.org/lists/lua-l/2002-09/msg00134.html .
 | 
						|
 | 
						|
  The included BIT.bit32 and BIT.bit sublibraries aims to provide 100%
 | 
						|
  compatibility with the Lua 5.2 "bit32" and (LuaJIT) LuaBitOp "bit" library.
 | 
						|
  This compatbility is at the cost of some efficiency since inputted
 | 
						|
  numbers are normalized and more general forms (e.g. multi-argument
 | 
						|
  bitwise operators) are supported.
 | 
						|
 | 
						|
STATUS
 | 
						|
 | 
						|
  WARNING: Not all corner cases have been tested and documented.
 | 
						|
  Some attempt was made to make these similar to the Lua 5.2 [2]
 | 
						|
  and LuaJit BitOp [3] libraries, but this is not fully tested and there
 | 
						|
  are currently some differences.  Addressing these differences may
 | 
						|
  be improved in the future but it is not yet fully determined how to
 | 
						|
  resolve these differences.
 | 
						|
 | 
						|
  The BIT.bit32 library passes the Lua 5.2 test suite (bitwise.lua)
 | 
						|
  http://www.lua.org/tests/5.2/ .  The BIT.bit library passes the LuaBitOp
 | 
						|
  test suite (bittest.lua).  However, these have not been tested on
 | 
						|
  platforms with Lua compiled with 32-bit integer numbers.
 | 
						|
 | 
						|
API
 | 
						|
 | 
						|
  Module's return
 | 
						|
 | 
						|
    This table contains functions that aim to provide 100% compatibility
 | 
						|
    with the LuaBitOp "bit" library (from LuaJIT).
 | 
						|
 | 
						|
    bit.tobit(x) --> y
 | 
						|
    bit.tohex(x [,n]) --> y
 | 
						|
    bit.bnot(x) --> y
 | 
						|
    bit.bor(x1 [,x2...]) --> y
 | 
						|
    bit.band(x1 [,x2...]) --> y
 | 
						|
    bit.bxor(x1 [,x2...]) --> y
 | 
						|
    bit.lshift(x, n) --> y
 | 
						|
    bit.rshift(x, n) --> y
 | 
						|
    bit.arshift(x, n) --> y
 | 
						|
    bit.rol(x, n) --> y
 | 
						|
    bit.ror(x, n) --> y
 | 
						|
    bit.bswap(x) --> y
 | 
						|
 | 
						|
DEPENDENCIES
 | 
						|
 | 
						|
  None (other than Lua 5.1 or 5.2).
 | 
						|
 | 
						|
REFERENCES
 | 
						|
 | 
						|
  [1] http://lua-users.org/wiki/FloatingPoint
 | 
						|
  [2] http://www.lua.org/manual/5.2/
 | 
						|
  [3] http://bitop.luajit.org/
 | 
						|
 | 
						|
LICENSE
 | 
						|
 | 
						|
  (c) 2008-2011 David Manura.  Licensed under the same terms as Lua (MIT).
 | 
						|
 | 
						|
  Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
						|
  of this software and associated documentation files (the "Software"), to deal
 | 
						|
  in the Software without restriction, including without limitation the rights
 | 
						|
  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
						|
  copies of the Software, and to permit persons to whom the Software is
 | 
						|
  furnished to do so, subject to the following conditions:
 | 
						|
 | 
						|
  The above copyright notice and this permission notice shall be included in
 | 
						|
  all copies or substantial portions of the Software.
 | 
						|
 | 
						|
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
						|
  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
						|
  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 | 
						|
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
						|
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
						|
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
						|
  THE SOFTWARE.
 | 
						|
  (end license)
 | 
						|
 | 
						|
  Some modifications by plenary team.
 | 
						|
 | 
						|
--]]
 | 
						|
 | 
						|
local M = {_TYPE='module', _NAME='bit.numberlua', _VERSION='0.3.1.20120131'}
 | 
						|
 | 
						|
local floor = math.floor
 | 
						|
 | 
						|
local MOD = 2^32
 | 
						|
local MODM = MOD-1
 | 
						|
 | 
						|
local function memoize(f)
 | 
						|
  local mt = {}
 | 
						|
  local t = setmetatable({}, mt)
 | 
						|
  function mt:__index(k)
 | 
						|
    local v = f(k); t[k] = v
 | 
						|
    return v
 | 
						|
  end
 | 
						|
  return t
 | 
						|
end
 | 
						|
 | 
						|
local function make_bitop_uncached(t, m)
 | 
						|
  local function bitop(a, b)
 | 
						|
    local res,p = 0,1
 | 
						|
    while a ~= 0 and b ~= 0 do
 | 
						|
      local am, bm = a%m, b%m
 | 
						|
      res = res + t[am][bm]*p
 | 
						|
      a = (a - am) / m
 | 
						|
      b = (b - bm) / m
 | 
						|
      p = p*m
 | 
						|
    end
 | 
						|
    res = res + (a+b)*p
 | 
						|
    return res
 | 
						|
  end
 | 
						|
  return bitop
 | 
						|
end
 | 
						|
 | 
						|
local function make_bitop(t)
 | 
						|
  local op1 = make_bitop_uncached(t,2^1)
 | 
						|
  local op2 = memoize(function(a)
 | 
						|
    return memoize(function(b)
 | 
						|
      return op1(a, b)
 | 
						|
    end)
 | 
						|
  end)
 | 
						|
  return make_bitop_uncached(op2, 2^(t.n or 1))
 | 
						|
end
 | 
						|
 | 
						|
-- ok?  probably not if running on a 32-bit int Lua number type platform
 | 
						|
function M.tobit(x)
 | 
						|
  return x % 2^32
 | 
						|
end
 | 
						|
 | 
						|
M.bxor = make_bitop {[0]={[0]=0,[1]=1},[1]={[0]=1,[1]=0}, n=4}
 | 
						|
local bxor = M.bxor
 | 
						|
 | 
						|
function M.bnot(a)   return MODM - a end
 | 
						|
local bnot = M.bnot
 | 
						|
 | 
						|
function M.band(a,b) return ((a+b) - bxor(a,b))/2 end
 | 
						|
local band = M.band
 | 
						|
 | 
						|
function M.bor(a,b)  return MODM - band(MODM - a, MODM - b) end
 | 
						|
local bor = M.bor
 | 
						|
 | 
						|
local lshift, rshift -- forward declare
 | 
						|
 | 
						|
function M.rshift(a,disp) -- Lua5.2 insipred
 | 
						|
  if disp < 0 then return lshift(a,-disp) end
 | 
						|
  return floor(a % 2^32 / 2^disp)
 | 
						|
end
 | 
						|
rshift = M.rshift
 | 
						|
 | 
						|
function M.lshift(a,disp) -- Lua5.2 inspired
 | 
						|
  if disp < 0 then return rshift(a,-disp) end
 | 
						|
  return (a * 2^disp) % 2^32
 | 
						|
end
 | 
						|
lshift = M.lshift
 | 
						|
 | 
						|
function M.tohex(x, n) -- BitOp style
 | 
						|
  n = n or 8
 | 
						|
  local up
 | 
						|
  if n <= 0 then
 | 
						|
    if n == 0 then return '' end
 | 
						|
    up = true
 | 
						|
    n = - n
 | 
						|
  end
 | 
						|
  x = band(x, 16^n-1)
 | 
						|
  return ('%0'..n..(up and 'X' or 'x')):format(x)
 | 
						|
end
 | 
						|
local tohex = M.tohex
 | 
						|
 | 
						|
function M.extract(n, field, width) -- Lua5.2 inspired
 | 
						|
  width = width or 1
 | 
						|
  return band(rshift(n, field), 2^width-1)
 | 
						|
end
 | 
						|
local extract = M.extract
 | 
						|
 | 
						|
function M.replace(n, v, field, width) -- Lua5.2 inspired
 | 
						|
  width = width or 1
 | 
						|
  local mask1 = 2^width-1
 | 
						|
  v = band(v, mask1) -- required by spec?
 | 
						|
  local mask = bnot(lshift(mask1, field))
 | 
						|
  return band(n, mask) + lshift(v, field)
 | 
						|
end
 | 
						|
local replace = M.replace
 | 
						|
 | 
						|
function M.bswap(x)  -- BitOp style
 | 
						|
  local a = band(x, 0xff); x = rshift(x, 8)
 | 
						|
  local b = band(x, 0xff); x = rshift(x, 8)
 | 
						|
  local c = band(x, 0xff); x = rshift(x, 8)
 | 
						|
  local d = band(x, 0xff)
 | 
						|
  return lshift(lshift(lshift(a, 8) + b, 8) + c, 8) + d
 | 
						|
end
 | 
						|
local bswap = M.bswap
 | 
						|
 | 
						|
function M.rrotate(x, disp)  -- Lua5.2 inspired
 | 
						|
  disp = disp % 32
 | 
						|
  local low = band(x, 2^disp-1)
 | 
						|
  return rshift(x, disp) + lshift(low, 32-disp)
 | 
						|
end
 | 
						|
local rrotate = M.rrotate
 | 
						|
 | 
						|
function M.lrotate(x, disp)  -- Lua5.2 inspired
 | 
						|
  return rrotate(x, -disp)
 | 
						|
end
 | 
						|
local lrotate = M.lrotate
 | 
						|
 | 
						|
M.rol = M.lrotate  -- LuaOp inspired
 | 
						|
M.ror = M.rrotate  -- LuaOp insipred
 | 
						|
 | 
						|
 | 
						|
function M.arshift(x, disp) -- Lua5.2 inspired
 | 
						|
  local z = rshift(x, disp)
 | 
						|
  if x >= 0x80000000 then z = z + lshift(2^disp-1, 32-disp) end
 | 
						|
  return z
 | 
						|
end
 | 
						|
local arshift = M.arshift
 | 
						|
 | 
						|
function M.btest(x, y) -- Lua5.2 inspired
 | 
						|
  return band(x, y) ~= 0
 | 
						|
end
 | 
						|
 | 
						|
--
 | 
						|
-- Start LuaBitOp "bit" compat section.
 | 
						|
--
 | 
						|
 | 
						|
M.bit = {} -- LuaBitOp "bit" compatibility
 | 
						|
 | 
						|
function M.bit.tobit(x)
 | 
						|
  x = x % MOD
 | 
						|
  if x >= 0x80000000 then x = x - MOD end
 | 
						|
  return x
 | 
						|
end
 | 
						|
local bit_tobit = M.bit.tobit
 | 
						|
 | 
						|
function M.bit.tohex(x, ...)
 | 
						|
  return tohex(x % MOD, ...)
 | 
						|
end
 | 
						|
 | 
						|
function M.bit.bnot(x)
 | 
						|
  return bit_tobit(bnot(x % MOD))
 | 
						|
end
 | 
						|
 | 
						|
local function bit_bor(a, b, c, ...)
 | 
						|
  if c then
 | 
						|
    return bit_bor(bit_bor(a, b), c, ...)
 | 
						|
  elseif b then
 | 
						|
    return bit_tobit(bor(a % MOD, b % MOD))
 | 
						|
  else
 | 
						|
    return bit_tobit(a)
 | 
						|
  end
 | 
						|
end
 | 
						|
M.bit.bor = bit_bor
 | 
						|
 | 
						|
local function bit_band(a, b, c, ...)
 | 
						|
  if c then
 | 
						|
    return bit_band(bit_band(a, b), c, ...)
 | 
						|
  elseif b then
 | 
						|
    return bit_tobit(band(a % MOD, b % MOD))
 | 
						|
  else
 | 
						|
    return bit_tobit(a)
 | 
						|
  end
 | 
						|
end
 | 
						|
M.bit.band = bit_band
 | 
						|
 | 
						|
local function bit_bxor(a, b, c, ...)
 | 
						|
  if c then
 | 
						|
    return bit_bxor(bit_bxor(a, b), c, ...)
 | 
						|
  elseif b then
 | 
						|
    return bit_tobit(bxor(a % MOD, b % MOD))
 | 
						|
  else
 | 
						|
    return bit_tobit(a)
 | 
						|
  end
 | 
						|
end
 | 
						|
M.bit.bxor = bit_bxor
 | 
						|
 | 
						|
function M.bit.lshift(x, n)
 | 
						|
  return bit_tobit(lshift(x % MOD, n % 32))
 | 
						|
end
 | 
						|
 | 
						|
function M.bit.rshift(x, n)
 | 
						|
  return bit_tobit(rshift(x % MOD, n % 32))
 | 
						|
end
 | 
						|
 | 
						|
function M.bit.arshift(x, n)
 | 
						|
  return bit_tobit(arshift(x % MOD, n % 32))
 | 
						|
end
 | 
						|
 | 
						|
function M.bit.rol(x, n)
 | 
						|
  return bit_tobit(lrotate(x % MOD, n % 32))
 | 
						|
end
 | 
						|
 | 
						|
function M.bit.ror(x, n)
 | 
						|
  return bit_tobit(rrotate(x % MOD, n % 32))
 | 
						|
end
 | 
						|
 | 
						|
function M.bit.bswap(x)
 | 
						|
  return bit_tobit(bswap(x % MOD))
 | 
						|
end
 | 
						|
 | 
						|
return M.bit
 |