50 lines
1.5 KiB
C++
50 lines
1.5 KiB
C++
// Copyright 2023 The LightningBolt Authors
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
//! Core types and includes
|
|
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <filesystem>
|
|
#include <memory>
|
|
#include <format>
|
|
#include <system_error>
|
|
|
|
// these are in the global namespace since most libraries
|
|
// won't try defining anything like this in the global namespace
|
|
// (and I'd like these types to be used globally a lot more anyways)
|
|
using u8 = std::uint8_t;
|
|
using i8 = std::int8_t;
|
|
using u16 = std::uint16_t;
|
|
using i16 = std::int16_t;
|
|
using u32 = std::uint32_t;
|
|
using i32 = std::int32_t;
|
|
using u64 = std::uint64_t;
|
|
using i64 = std::int64_t;
|
|
using usize = std::size_t;
|
|
using isize = std::intptr_t;
|
|
|
|
namespace lightningbolt {
|
|
namespace fs = std::filesystem;
|
|
|
|
template <class T, class Deleter = std::default_delete<T>>
|
|
using Unique = std::unique_ptr<T, Deleter>;
|
|
|
|
template <class T>
|
|
using Ref = std::shared_ptr<T>;
|
|
|
|
} // namespace lightningbolt
|
|
|
|
namespace std {
|
|
/// Custom formatter for std::error_code. As far as I know, this is
|
|
/// Not going to be added in C++23, despite the fact fmt already has a specialization for it,
|
|
/// so I have to implement one myself. At least it's not that awful to.
|
|
template <>
|
|
struct formatter<error_code> : formatter<string_view> {
|
|
template <typename FormatContext>
|
|
inline constexpr auto format(const error_code& ec, FormatContext& ctx) const {
|
|
return std::format_to(ctx.out(), "{} [{}.{}]", ec.message(), ec.category().name(), ec.value());
|
|
}
|
|
};
|
|
} // namespace std
|