{"id":"brinkokevin/bitbuffer","name":"bitbuffer","scope":"brinkokevin","platform":"roblox","description":"rstk's bitbuffer with native enabled Github: https://github.com/rstk/bitbuffer","version":"1.0.1","latest":"1.0.1","versions":["1.0.1"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{},"integrity":"71625137ac71c1d59dbf700294570736c9a42bca9a4de9315f9eb21781cee35e","likes":0,"downloads":0,"install":"forest install brinkokevin/bitbuffer","url":"https://forest.dev/p/roblox/brinkokevin/bitbuffer","files":"https://api.forest.dev/ai/package/roblox/brinkokevin/bitbuffer/files","readme":"# BitBuffer\r\n\r\nBlazing-fast BitBuffer for Roblox.\r\n\r\n### Wally\r\n\r\nBitBuffer is available on [wally](https://github.com/upliftgames/wally/). Add this to your `wally.toml` and run `wally install`\r\n\r\n```toml\r\n[dependencies]\r\nBitBuffer = \"rstk/bitbuffer@1.0.0\"\r\n```\r\n\r\n## Usage\r\n\r\n```lua\r\nlocal ReplicatedStorage = game:GetService(\"ReplicatedStorage\")\r\nlocal BitBuffer = require(ReplicatedStorage.Packages.BitBuffer)\r\n\r\nlocal PlayerData = {}\r\nPlayerData.__index = PlayerData\r\n\r\nfunction PlayerData.new(serialized: string?)\r\n\tlocal buffer = BitBuffer.FromBase91(serialized or \"\")\r\n\r\n\treturn setmetatable({\r\n\t\tMoney = buffer:ReadUInt(32);\r\n\t\tExperience = buffer:ReadUInt(16);\r\n\t\tAverageFps = buffer:ReadFloat32();\r\n\t\tCustomName = buffer:ReadString();\r\n\t}, PlayerData)\r\nend\r\n\r\nfunction PlayerData:Serialize(): string\r\n\tlocal buffer = BitBuffer.new()\r\n\tbuffer:WriteUInt(32, self.Money)\r\n\tbuffer:WriteUInt(16, self.Experience)\r\n\tbuffer:WriteFloat32(self.AverageFps)\r\n\tbuffer:WriteString(self.CustomName)\r\n\r\n\treturn buffer:ToBase91()\r\nend\r\n\r\nexport type PlayerData = typeof(PlayerData.new())\r\nreturn PlayerData\r\n```\r\n\r\n## Docs\r\n\r\nDocumentation can be found [here](https://rstk.github.io/BitBuffer). Keep in mind this is work in progress.\r\n\r\n## Minimal tutorial\r\n\r\nThe available types are:\r\n- UInt\r\n- Int\r\n- Bool\r\n- Char\r\n- Bytes\r\n- String\r\n- Float32\r\n- Float64\r\n\r\nYou can serialize the buffer into:\r\n- String\r\n- Base64\r\n- Base91 (recommended for DataStores)\r\n- Base128\r\n\r\nUsing the methods `BitBuffer::ToString()`, `BitBuffer::ToBase64()`, `BitBuffer::ToBase91()` and `BitBuffer::ToBase128()`.  \r\n\r\nCreate a new BitBuffer with one of the following constructors:\r\n- new\r\n- FromString\r\n- FromBase64\r\n- FromBase91\r\n- FromBase128\r\n\r\nWrite/Read methods are `buffer:Write<type name>`/`buffer:Read<type name>`.  \r\nFor example:\r\n```lua\r\nbuffer:WriteUInt(32, 1)\r\nbuffer:ReadString()\r\nbuffer:WriteBool(true)\r\n```\r\n\r\nA BitBuffer has a cursor, indexed in bits, which increases every time something is written/read.\r\n```lua\r\nlocal buffer = BitBuffer.new() -- The cursor's position is 0\r\nbuffer:WriteUInt(16, 1) --> It's now 16\r\nbuffer:WriteFloat64() --> It's now 80\r\nbuffer:ResetCursor() --> It's now 0\r\nbuffer:ReadUInt(16) --> It's now 16\r\n```\r\n\r\nA BitBuffer also keeps track of its size.\r\n```lua\r\nlocal buffer = BitBuffer.new() --> Size is 0\r\nbuffer:WriteUInt(32, 80) --> Size is 32\r\nbuffer:WriteFloat64() --> Size is 96\r\nbuffer:ResetCursor() --> Size is still 96\r\nbuffer:ReadUInt(32) --> Size is still 96\r\nbuffer:ResetBuffer() --> Size is now 0\r\n```\r\n\r\nThe rest of the methods are:\r\n```lua\r\nbuffer:ResetCursor(): ()\r\nbuffer:SetCursor(position: number): ()\r\nbuffer:GetCursor(): number\r\nbuffer:ResetBuffer(): ()\r\nbuffer:GetSize(): number\r\n```\r\n","readmeTruncated":false}