Maor Bugs Fixed!!!

the bits library had a bug where numbers were not being converted correctly... This was VERY BAD!!!

Funny thing is that infinabits was correctly coded and worked!
This commit is contained in:
Ryan 2017-11-22 17:51:41 -05:00
parent 95c61f08c0
commit c069a981cd
6 changed files with 93 additions and 113 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
crypto.lua crypto.lua
crypto.lua crypto.lua
crypto.lua crypto.lua
crypto.lua

View File

@ -1,5 +1,5 @@
bin={} bin={}
bin.Version={5,0,6} bin.Version={5,1,0}
bin.stage='stable' bin.stage='stable'
bin.data='' bin.data=''
bin.t='bin' bin.t='bin'

View File

@ -5,6 +5,7 @@ bits.Type='bits'
bits.__index = bits bits.__index = bits
bits.__tostring=function(self) return self.data end bits.__tostring=function(self) return self.data end
bits.__len=function(self) return (#self.data)/8 end bits.__len=function(self) return (#self.data)/8 end
local floor,insert = math.floor, table.insert
function bits.newBitBuffer(n) function bits.newBitBuffer(n)
-- --
end end
@ -12,6 +13,22 @@ function bits.newConverter(bitsIn,bitsOut)
local c={} local c={}
-- --
end end
function basen(n,b)
if not b or b == 10 then return tostring(n) end
local digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
local t = {}
local sign = ""
if n < 0 then
sign = "-"
n = -n
end
repeat
local d = n % b + 1
n = n / b
insert(t, 1, digits:sub(d,d))
until n == 0
return sign .. table.concat(t,"")
end
bits.ref={} bits.ref={}
function bits.newByte(d) function bits.newByte(d)
local c={} local c={}
@ -67,42 +84,27 @@ function bits.newByteArray(s)
end end
return c return c
end end
function bits.new(n,s) function bits.new(n,binary)
if type(n)=='string' then local temp={}
local t=tonumber(n,2) temp.t="bits"
if t and #n<8 and not(s) then temp.Type="bits"
t=nil if type(n)=="string" then
end if binary then
if not(t) then temp.data=n:match("[10]+")
t={} else
local t={}
for i=#n,1,-1 do for i=#n,1,-1 do
table.insert(t,bits:conv(string.byte(n,i))) table.insert(t,bits:conv(string.byte(n,i)))
end end
n=table.concat(t) temp.data=table.concat(t)
else
n=t
end end
elseif type(n)=="number" or type(n)=="table" then
temp.data=basen(n,2)
end
if #temp.data%8~=0 then
temp.data=string.rep('0',8-#temp.data%8)..temp.data
end end
local temp={}
temp.t='bits'
temp.Type="bits"
setmetatable(temp, bits) setmetatable(temp, bits)
if type(n)~='string' then
local tab={}
while n>=1 do
table.insert(tab,n%2)
n=math.floor(n/2)
end
local str=string.reverse(table.concat(tab))
if #str%8~=0 then
temp.data=string.rep('0',8-(#str))..str
elseif #str==0 then
temp.data="00000000"
end
else
temp.data=n or "00000000"
end
setmetatable({__tostring=function(self) return self.data end},temp)
return temp return temp
end end
for i=0,255 do for i=0,255 do
@ -112,48 +114,25 @@ for i=0,255 do
bits.ref[d]=i bits.ref[d]=i
bits.ref["\255"..string.char(i)]=d bits.ref["\255"..string.char(i)]=d
end end
function bits.numToBytes(n,fit,fmt,func) function bits.numToBytes(n,fit,func)
if fmt=="%e" then local num=string.reverse(bits.new(n):toSbytes())
local num=string.reverse(bits.new(n):toSbytes()) local ref={["num"]=num,["fit"]=fit}
local ref={["num"]=num,["fit"]=fit} if fit then
if fit then if fit<#num then
if fit<#num then if func then
if func then print("Warning: attempting to store a number that takes up more space than allotted! Using provided method!")
print("Warning: attempting to store a number that takes up more space than allotted! Using provided method!") func(ref)
func(ref)
else
print("Warning: attempting to store a number that takes up more space than allotted!")
end
return ref.num:sub(1,ref.fit)
elseif fit==#num then
return num
else else
return string.rep("\0",fit-#num)..num print("Warning: attempting to store a number that takes up more space than allotted!")
end end
else return ref.num:sub(1,ref.fit)
return num elseif fit==#num then
end
else
local num=string.reverse(bits.new(n):toSbytes())
local ref={["num"]=num,["fit"]=fit}
if fit then
if fit<#num then
if func then
print("Warning: attempting to store a number that takes up more space than allotted! Using provided method!")
func(ref)
else
print("Warning: attempting to store a number that takes up more space than allotted!")
end
return ref.num:sub(1,ref.fit)
elseif fit==#num then
return string.reverse(num)
else
return string.reverse(string.rep("\0",fit-#num)..num)
end
else
return string.reverse(num) return string.reverse(num)
else
return string.reverse(string.rep("\0",fit-#num)..num)
end end
else
return string.reverse(num)
end end
end end
function bits:conv(n) function bits:conv(n)

View File

@ -1,44 +1,6 @@
function bubbleSort(A) package.path="?/init.lua;"..package.path
local itemCount=#A require("bin")
local hasChanged --~ test=bin.load("test.dat")
repeat --~ print(test:getBlock("n",4))
for i=1,#A do --~ print(test:getBlock("n",4))
io.write(string.char(A[i])) --~ tab=test:getBlock("t")
end
io.write("\n")
hasChanged = false
itemCount=itemCount - 1
for i = 1, itemCount do
if A[i] > A[i + 1] then
A[i], A[i + 1] = A[i + 1], A[i]
hasChanged = true
end
end
until hasChanged == false
end
reflist={"A","S","S","I","G","N","M","E","N","T"}
list={}
list2={}
for i,v in pairs(reflist) do
list[#list+1]=string.byte(v)
list2[#list2+1]=string.byte(v)
end
function SelectionSort(f)
for k = 1, #f-1 do
for i=1,#f do
io.write(string.char(f[i]))
end
io.write("\n")
local idx = k
for i = k+1, #f do
if f[i] < f[idx] then
idx = i
end
end
f[k], f[idx] = f[idx], f[k]
end
end
print("Bubble Sort")
bubbleSort(list)
print("Selection Sort")
SelectionSort(list2)

View File

@ -0,0 +1,38 @@
package = "bin"
version = "5.1-0"
source = {
url = "git://github.com/rayaman/bin.git",
tag = "v5.1.0",
}
description = {
summary = "Lua Binary ManIpulatioN library",
detailed = [[
This library contains many methods for working with files at the binary level. It can handle sterilization of all lua objects except userdata. It can even handle self recursion in talbes. It provides a bit, bits, infinabits, base64/91, lzw, md5 hashing, bignum, random, and a virtual file system(Soon, check out oldbin.lua for that) module.
The bit library is the same that comes with luajit. the bits/infinabits library deals with 1's and 0's used for numbers. bits is faster than infinabits, but is limited to 32/64 bits based on which version of lua you are working on. Base64/91 is provided, but since it is done in pure lua it is slower. Check out the github for more info.
]],
homepage = "https://github.com/rayaman/bin",
license = "MIT"
}
dependencies = {
"lua >= 5.1"
}
build = {
type = "builtin",
modules = {
-- Note the required Lua syntax when listing submodules as keys
["bin.init"] = "bin/init.lua",
["bin.converters.base64"] = "bin/converters/base64.lua",
["bin.converters.base91"] = "bin/converters/base91.lua",
["bin.numbers.BigNum"] = "bin/numbers/BigNum.lua",
["bin.numbers.BigRat"] = "bin/numbers/BigRat.lua",
["bin.numbers.bits"] = "bin/numbers/bits.lua",
["bin.support.extrablocks"] = "bin/support/extrablocks.lua",
["bin.numbers.infinabits"] = "bin/numbers/infinabits.lua",
["bin.compressors.lzw"] = "bin/compressors/lzw.lua",
["bin.hashes.md5"] = "bin/hashes/md5.lua",
["bin.numbers.no_jit_bit"] = "bin/numbers/no_jit_bit.lua",
["bin.numbers.random"] = "bin/numbers/random.lua",
["bin.support.utils"] = "bin/support/utils.lua",
["bin.support.vfs"] = "bin/support/vfs.lua",
}
}

BIN
test.dat

Binary file not shown.