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