[ox/claw] Add strip header function

This commit is contained in:
Gary Talent 2020-06-15 01:34:22 -05:00
parent 4f1593a0ed
commit 4a221e52db
2 changed files with 20 additions and 3 deletions

View File

@ -8,7 +8,9 @@
#include "read.hpp" #include "read.hpp"
namespace ox::detail { namespace ox {
namespace detail {
ValErr<ClawHeader> readHeader(const char *buff, std::size_t buffLen) noexcept { ValErr<ClawHeader> readHeader(const char *buff, std::size_t buffLen) noexcept {
const auto s1End = ox_strchr(buff, ';', buffLen); const auto s1End = ox_strchr(buff, ';', buffLen);
@ -36,6 +38,7 @@ ValErr<ClawHeader> readHeader(const char *buff, std::size_t buffLen) noexcept {
const auto s3Size = s3End - buff; const auto s3Size = s3End - buff;
String versionStr(buff, s3Size); String versionStr(buff, s3Size);
buff += s3Size + 1; buff += s3Size + 1;
buffLen -= s3Size + 1;
ClawHeader hdr; ClawHeader hdr;
if (fmt == "M1") { if (fmt == "M1") {
@ -48,7 +51,18 @@ ValErr<ClawHeader> readHeader(const char *buff, std::size_t buffLen) noexcept {
hdr.typeName = typeName; hdr.typeName = typeName;
hdr.typeVersion = ox_atoi(versionStr.c_str()); hdr.typeVersion = ox_atoi(versionStr.c_str());
hdr.data = buff; hdr.data = buff;
hdr.dataSize = buffLen;
return hdr; return hdr;
} }
} }
ValErr<Vector<char>> stripClawHeader(const char *buff, std::size_t buffLen) noexcept {
auto header = detail::readHeader(buff, buffLen);
oxReturnError(header);
Vector<char> out(header.value.dataSize);
ox_memcpy(out.data(), header.value.data, out.size());
return ox::move(out);
}
}

View File

@ -24,14 +24,17 @@ struct ClawHeader {
int typeVersion = -1; int typeVersion = -1;
ClawFormat fmt = ClawFormat::None; ClawFormat fmt = ClawFormat::None;
const char *data = nullptr; const char *data = nullptr;
std::size_t dataSize = 0;
}; };
ValErr<ClawHeader> readHeader(const char *buff, std::size_t buffLen) noexcept; [[nodiscard]] ValErr<ClawHeader> readHeader(const char *buff, std::size_t buffLen) noexcept;
} }
[[nodiscard]] ValErr<Vector<char>> stripClawHeader(const char *buff, std::size_t buffLen) noexcept;
template<typename T> template<typename T>
Error readClaw(char *buff, std::size_t buffLen, T *val) { [[nodiscard]] Error readClaw(char *buff, std::size_t buffLen, T *val) {
auto header = detail::readHeader(buff, buffLen); auto header = detail::readHeader(buff, buffLen);
oxReturnError(header); oxReturnError(header);
switch (header.value.fmt) { switch (header.value.fmt) {