From 4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Wed, 4 Jan 2017 23:27:36 -0500 Subject: Started refactoring item and inventory system --- gamemode/utility/stream.lua | 85 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 gamemode/utility/stream.lua (limited to 'gamemode/utility/stream.lua') diff --git a/gamemode/utility/stream.lua b/gamemode/utility/stream.lua new file mode 100644 index 0000000..cdf3933 --- /dev/null +++ b/gamemode/utility/stream.lua @@ -0,0 +1,85 @@ +--[[ + A stream object, has the methods: + stream:WriteString(string) :: nil + stream:WriteInt(num,bytes) :: nil + + stream:ReadString() :: string + stream:ReadInt(bytes) :: number + + stream:ToString() :: string +]] + +local ss = {} + +local function WriteString(self,string) + local buflen = #self.buf + for i=1,#string do + self.buf[buflen+i] = string.byte(string,i) + end + self.buf[#self.buf + 1] = 0 +end + +local function WriteInt(self,num,bytes) + local buflen = #self.buf + local byte = 255 + for i = 1,bytes do + --[[ + pack[i] = (num & byte) >> (i-1)*8 + byte = 255 << i*8 + ]] + self.buf[buflen + i] = bit.rshift(bit.band(num,byte),(i-1)*8) + byte = bit.lshift(255,i*8) + end +end + +local function ReadInt(self,len) + local tbl = {} + for i = 1, len do + tbl[i] = self.buf[i] + end + for i = 1, #self.buf do + self.buf[i] = self.buf[i+len] + end + local byte = 1 + local num = 0 + for i = 1, #tbl do + num = num + (tbl[i] * byte) + byte = 2 ^ (i*8) + end + return num +end + +local function ReadString(self) + local str = {} + local strlen = 1 + while self.buf[strlen] ~= 0 do + str[#str + 1] = string.char(self.buf[strlen]) + strlen = strlen + 1 + end + for i = 1,strlen do + self.buf[i] = self.buf[i+strlen] + end + return table.concat(str) +end + +local function ToString(self) + return table.concat(self.buf) +end + +function ss.CreateStream(str) + local ns = {} + ns.buf = {} + if str ~= nil then + for i = 1, #str do + ns[i] = str[i] + end + end + ns.ReadString = ReadString + ns.ReadInt = ReadInt + ns.WriteString = WriteString + ns.WriteInt = WriteInt + ns.ToString = ToString + return ns +end + +return ss -- cgit v1.2.3-70-g09d2