diff options
| author | Alexander Pickering <alexandermpickering@gmail.com> | 2017-01-04 23:27:36 -0500 |
|---|---|---|
| committer | Alexander Pickering <alexandermpickering@gmail.com> | 2017-01-04 23:27:36 -0500 |
| commit | 4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99 (patch) | |
| tree | ac47724191a8959c19b2408d4da384d64b6098ec /gamemode/utility/stream.lua | |
| parent | 2c4329e2b6e19182a441f79a5c3010011f8ae767 (diff) | |
| download | artery-4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99.tar.gz artery-4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99.tar.bz2 artery-4879eb1d78520ce0ac9b0bb0ef5244cf65ad7c99.zip | |
Started refactoring item and inventory system
Diffstat (limited to 'gamemode/utility/stream.lua')
| -rw-r--r-- | gamemode/utility/stream.lua | 85 |
1 files changed, 85 insertions, 0 deletions
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 |
