[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"
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
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;
|
||||
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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user