[ox/claw] Add strip header function
This commit is contained in:
parent
4f1593a0ed
commit
4a221e52db
16
deps/ox/src/ox/claw/read.cpp
vendored
16
deps/ox/src/ox/claw/read.cpp
vendored
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
7
deps/ox/src/ox/claw/read.hpp
vendored
7
deps/ox/src/ox/claw/read.hpp
vendored
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user