tutrcos
読み取り中…
検索中…
一致する文字列を見つけられません
utility.hpp
[詳解]
1#pragma once
2
3#include <cassert>
4#include <cstddef>
5#include <cstdint>
6#include <cstdio>
7#include <string>
8#include <type_traits>
9#include <vector>
10
11#include "cobs.h"
12
13#ifdef NDEBUG
14#define TUTRCOS_VERIFY(expr) ((void)(expr))
15#else
16#define TUTRCOS_VERIFY(expr) assert((expr))
17#endif
18
19namespace tutrcos {
20namespace utility {
21
22template <class T>
23constexpr std::underlying_type_t<T> to_underlying(T value) noexcept {
24 return static_cast<std::underlying_type_t<T>>(value);
25}
26
27template <class... Args> std::string format(const char *fmt, Args... args) {
28 size_t size = std::snprintf(nullptr, 0, fmt, args...);
29 std::string buf(size, '\0');
30 std::snprintf(buf.data(), size + 1, fmt, args...);
31 return buf;
32}
33
34inline bool cobs_encode(const std::vector<uint8_t> &src,
35 std::vector<uint8_t> &dest) {
36 dest.resize(COBS_ENCODE_DST_BUF_LEN_MAX(src.size()));
37 cobs_encode_result res =
38 ::cobs_encode(dest.data(), dest.size(), src.data(), src.size());
39 if (res.status != COBS_ENCODE_OK) {
40 return false;
41 }
42 dest.resize(res.out_len);
43 return true;
44}
45
46inline bool cobs_decode(const std::vector<uint8_t> &src,
47 std::vector<uint8_t> &dest) {
48 dest.resize(COBS_DECODE_DST_BUF_LEN_MAX(src.size()));
49 cobs_decode_result res =
50 ::cobs_decode(dest.data(), dest.size(), src.data(), src.size());
51 if (res.status != COBS_DECODE_OK) {
52 return false;
53 }
54 dest.resize(res.out_len);
55 return true;
56}
57
58} // namespace utility
59} // namespace tutrcos
std::string format(const char *fmt, Args... args)
Definition utility.hpp:27
constexpr std::underlying_type_t< T > to_underlying(T value) noexcept
Definition utility.hpp:23
bool cobs_encode(const std::vector< uint8_t > &src, std::vector< uint8_t > &dest)
Definition utility.hpp:34
bool cobs_decode(const std::vector< uint8_t > &src, std::vector< uint8_t > &dest)
Definition utility.hpp:46
Definition kernel.hpp:7