Haio
0.2.X
Homebrew Asset IO/CDN
Toggle main menu visibility
Loading...
Searching...
No Matches
bytes.cpp
Go to the documentation of this file.
1
#include <
haio_util.hpp
>
2
3
namespace
Haio::Util
{
4
5
bool
hasBytes
(
Bytes
data,
size_t
off,
size_t
len) {
6
return
off <= data.size() && len <= data.size() - off;
7
}
8
9
void
appendU32LE
(std::vector<uint8_t>& out, uint32_t value) {
10
out.push_back(
static_cast<
uint8_t
>
(value));
11
out.push_back(
static_cast<
uint8_t
>
(value >> 8));
12
out.push_back(
static_cast<
uint8_t
>
(value >> 16));
13
out.push_back(
static_cast<
uint8_t
>
(value >> 24));
14
}
15
16
void
appendU64LE
(std::vector<uint8_t>& out, uint64_t value) {
17
appendU32LE
(out,
static_cast<
uint32_t
>
(value));
18
appendU32LE
(out,
static_cast<
uint32_t
>
(value >> 32));
19
}
20
21
uint32_t
readU32LE
(
Bytes
data,
size_t
off) {
22
if
(!
hasBytes
(data, off, 4))
return
0;
23
return
static_cast<
uint32_t
>
(data[off + 0])
24
| (
static_cast<
uint32_t
>
(data[off + 1]) << 8)
25
| (
static_cast<
uint32_t
>
(data[off + 2]) << 16)
26
| (
static_cast<
uint32_t
>
(data[off + 3]) << 24);
27
}
28
29
uint32_t
readU32BE
(
Bytes
data,
size_t
off) {
30
if
(!
hasBytes
(data, off, 4))
return
0;
31
return
(
static_cast<
uint32_t
>
(data[off + 0]) << 24)
32
| (
static_cast<
uint32_t
>
(data[off + 1]) << 16)
33
| (
static_cast<
uint32_t
>
(data[off + 2]) << 8)
34
|
static_cast<
uint32_t
>
(data[off + 3]);
35
}
36
37
uint64_t
readU64LE
(
Bytes
data,
size_t
off) {
38
return
static_cast<
uint64_t
>
(
readU32LE
(data, off))
39
| (
static_cast<
uint64_t
>
(
readU32LE
(data, off + 4)) << 32);
40
}
41
42
Result<std::vector<uint8_t>
>
slice
(
Bytes
data,
size_t
off,
size_t
len) {
43
if
(!
hasBytes
(data, off, len)) {
44
return
std::unexpected(
Error
{
ErrorCode::InvalidInput
,
"truncated payload"
});
45
}
46
return
std::vector<uint8_t>{data.begin() +
static_cast<
std::ptrdiff_t
>
(off),
47
data.begin() +
static_cast<
std::ptrdiff_t
>
(off + len)};
48
}
49
50
}
haio_util.hpp
Haio::Util
Definition
haio_util.hpp:15
Haio::Util::readU32BE
uint32_t readU32BE(Bytes data, size_t off)
Definition
bytes.cpp:29
Haio::Util::slice
Result< std::vector< uint8_t > > slice(Bytes data, size_t off, size_t len)
Definition
bytes.cpp:42
Haio::Util::readU64LE
uint64_t readU64LE(Bytes data, size_t off)
Definition
bytes.cpp:37
Haio::Util::hasBytes
bool hasBytes(Bytes data, size_t off, size_t len)
Definition
bytes.cpp:5
Haio::Util::appendU64LE
void appendU64LE(std::vector< uint8_t > &out, uint64_t value)
Definition
bytes.cpp:16
Haio::Util::readU32LE
uint32_t readU32LE(Bytes data, size_t off)
Definition
bytes.cpp:21
Haio::Util::appendU32LE
void appendU32LE(std::vector< uint8_t > &out, uint32_t value)
Definition
bytes.cpp:9
Haio::Result
std::expected< T, Error > Result
Definition
haio_codec.hpp:32
Haio::ErrorCode::InvalidInput
@ InvalidInput
Definition
haio_codec.hpp:18
Haio::Bytes
std::span< const uint8_t > Bytes
Definition
haio_codec.hpp:14
Haio::Error
Definition
haio_codec.hpp:26
library
common
utils
bytes.cpp
Generated by
1.18.0