lightningbolt/lib/base/Types.hpp

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