31constexpr T
Pi = std::numbers::pi_v<T>;
42 requires std::is_arithmetic_v<T>
51 return std::sqrt(x * x + y * y);
58 return *
this /
norm();
63using vectorf = vector<float>;
68 return {
a.x+
b.x,
a.y+
b.y};
75 return {
a.x-
b.x,
a.y-
b.y};
81 return {
a.x *
b,
a.y *
b};
87 return {
a.x /
b,
a.y /
b};
110 {
c.data() } -> std::convertible_to<const std::byte*>;
111 {
c.size() } -> std::convertible_to<std::size_t>;
120template<package T,
byte_container C>
124 std::memcpy(&
t,
bytes.data(),
sizeof(T));
135template<package T,
typename C>
136requires requires(
C&
c) {
137 {
c.data() } -> std::convertible_to<std::byte*>;
138 {
c.size() } -> std::convertible_to<std::size_t>;
148 static const auto init_time = std::chrono::steady_clock::now();
149 return std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::steady_clock::now() -
init_time);
169inline constexpr std::byte
to_byte(std::integral
auto v)
noexcept{
170 return static_cast<std::byte
>(
v);
176template<
typename Ret,
typename Arg>
179template<
typename Ret,
typename Class,
typename Arg>
183using function_arg_t =
typename function_arg<
decltype(&Fn::operator())>::type;
描述具有 data() 与 size() 接口的字节容器。
asio::awaitable< T > awaitable
协程任务类型。
constexpr std::byte to_byte(std::integral auto v) noexcept
辅助将整数转换为 std::byte。
constexpr int16_t make_i16(int16_t high, int16_t low) noexcept
将高低字节组合成有符号 16 位整数。
T from_bytes(const C &bytes)
将字节容器内容反序列化为平凡类型。
void to_bytes(const T &t, C &container)
将平凡类型序列化到指定容器。
constexpr uint16_t make_u16(uint16_t high, uint16_t low) noexcept
将高低字节组合成无符号 16 位整数。
auto now()
记录程序启动后的纳秒级时间戳。
constexpr fp32 rad_format(fp32 ang)
将角度限制到[-Pi,Pi]范围内
vector normalized() const
获取该向量的单位化结果。
constexpr T Pi
常量 Pi 的模板实例。
constexpr auto Pi_f
单精度浮点类型的 Pi 常量。