[Yunq] Create libyunq and move parsing code to it.

This commit is contained in:
Drew Galbraith 2023-12-01 09:30:52 -08:00
parent 91f3f8ee43
commit 7d9f9a7ae9
16 changed files with 310 additions and 260 deletions

View file

@ -1,6 +1,8 @@
// Generated file -- DO NOT MODIFY.
#include "voyageurs.yunq.h"
#include <yunq/serialize.h>
namespace {
@ -11,43 +13,30 @@ struct ExtPointer {
uint32_t length;
};
void CheckHeader(const glcr::ByteBuffer& bytes) {
// TODO: Check ident.
// TODO: Parse core size.
// TODO: Parse extension size.
// TODO: Check CRC32
// TODO: Parse options.
}
void WriteHeader(glcr::ByteBuffer& bytes, uint64_t offset, uint32_t core_size, uint32_t extension_size) {
bytes.WriteAt<uint32_t>(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence.
bytes.WriteAt<uint32_t>(offset + 4, core_size);
bytes.WriteAt<uint32_t>(offset + 8, extension_size);
bytes.WriteAt<uint32_t>(offset + 12, 0); // TODO: Calculate CRC32.
bytes.WriteAt<uint64_t>(offset + 16, 0); // TODO: Add options.
}
} // namespace
void KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset);
glcr::Status KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse port_capability.
// FIXME: Implement in-buffer capabilities for inprocess serialization.
set_port_capability(0);
return glcr::Status::Ok();
}
void KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset);
glcr::Status KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse port_capability.
uint64_t port_capability_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 0));
set_port_capability(caps.At(port_capability_ptr));
return glcr::Status::Ok();
}
void KeyboardListener::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes);
glcr::Status KeyboardListener::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse port_capability.
// Skip Cap.
return glcr::Status::Ok();
}
uint64_t KeyboardListener::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const {
@ -58,7 +47,7 @@ uint64_t KeyboardListener::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 0), 0);
// The next extension pointer is the length of the message.
WriteHeader(bytes, offset, core_size, next_extension);
yunq::WriteHeader(bytes, offset, core_size, next_extension);
return next_extension;
}
@ -72,7 +61,7 @@ uint64_t KeyboardListener::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 0), next_cap++);
// The next extension pointer is the length of the message.
WriteHeader(bytes, offset, core_size, next_extension);
yunq::WriteHeader(bytes, offset, core_size, next_extension);
return next_extension;
}

View file

@ -3,6 +3,7 @@
#include <glacier/buffer/byte_buffer.h>
#include <glacier/buffer/cap_buffer.h>
#include <glacier/status/status.h>
#include <glacier/container/vector.h>
#include <glacier/string/string.h>
#include <ztypes.h>
@ -15,8 +16,8 @@ class KeyboardListener {
KeyboardListener(const KeyboardListener&) = delete;
KeyboardListener(KeyboardListener&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset);
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&);
glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset);
glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const z_cap_t& port_capability() const { return port_capability_; }
@ -26,6 +27,6 @@ class KeyboardListener {
z_cap_t port_capability_;
// Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
};