[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"
namespace ox::detail {
namespace ox {
namespace detail {
ValErr<ClawHeader> readHeader(const char *buff, std::size_t buffLen) noexcept {
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;
String versionStr(buff, s3Size);
buff += s3Size + 1;
buffLen -= s3Size + 1;
ClawHeader hdr;
if (fmt == "M1") {
@ -48,7 +51,18 @@ ValErr<ClawHeader> readHeader(const char *buff, std::size_t buffLen) noexcept {
hdr.typeName = typeName;
hdr.typeVersion = ox_atoi(versionStr.c_str());
hdr.data = buff;
hdr.dataSize = buffLen;
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;
ClawFormat fmt = ClawFormat::None;
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>
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);
oxReturnError(header);
switch (header.value.fmt) {