Skip to content

Instantly share code, notes, and snippets.

@JadenGeller
Created November 18, 2023 02:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JadenGeller/db05ecbb5aae11b758c9b38ce9e056a0 to your computer and use it in GitHub Desktop.
Save JadenGeller/db05ecbb5aae11b758c9b38ce9e056a0 to your computer and use it in GitHub Desktop.
BufferLoader
struct BufferLoader {
var buffer: UnsafeRawBufferPointer
var byteOffset: Int = 0
mutating func loadUnaligned<T>(as type: T.Type) -> T {
defer { byteOffset += MemoryLayout<T>.size }
return buffer.loadUnaligned(fromByteOffset: byteOffset, as: T.self)
}
}
extension UnsafeRawBufferPointer {
func load<Result>(_ block: (inout BufferLoader) throws -> Result) rethrows -> Result {
var loader = BufferLoader(buffer: self)
return try block(&loader)
}
}
@JadenGeller
Copy link
Author

JadenGeller commented Nov 18, 2023

to store, just append to ContiguousArray

var bytes = ContiguousArray<UInt8>()
bytes.reserveCapacity(MemoryLayout<UInt8>.size + MemoryLayout<UInt32>.size)
Swift.withUnsafeBytes(of: level.bigEndian, bytes.append)
Swift.withUnsafeBytes(of: key.bigEndian, bytes.append)
return try bytes.withUnsafeBytes(body)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment