30#include <unordered_map>
32#define DEFINE_ENUM_FLAGS(ENUM_TYPE) \
33inline constexpr ENUM_TYPE operator~(ENUM_TYPE a) noexcept { \
34 using underlying = std::underlying_type_t<ENUM_TYPE>; \
35 return static_cast<ENUM_TYPE>(~static_cast<underlying>(a)); \
37inline constexpr ENUM_TYPE operator|(ENUM_TYPE lhs, ENUM_TYPE rhs) noexcept { \
38 using underlying = std::underlying_type_t<ENUM_TYPE>; \
39 return static_cast<ENUM_TYPE>(static_cast<underlying>(lhs) | static_cast<underlying>(rhs)); \
41inline constexpr ENUM_TYPE operator&(ENUM_TYPE lhs, ENUM_TYPE rhs) noexcept { \
42 using underlying = std::underlying_type_t<ENUM_TYPE>; \
43 return static_cast<ENUM_TYPE>(static_cast<underlying>(lhs) & static_cast<underlying>(rhs)); \
45inline constexpr ENUM_TYPE operator^(ENUM_TYPE lhs, ENUM_TYPE rhs) noexcept { \
46 using underlying = std::underlying_type_t<ENUM_TYPE>; \
47 return static_cast<ENUM_TYPE>(static_cast<underlying>(lhs) ^ static_cast<underlying>(rhs)); \
49inline ENUM_TYPE& operator|=(ENUM_TYPE& lhs, ENUM_TYPE rhs) noexcept { \
50 return lhs = (lhs | rhs); \
52inline ENUM_TYPE& operator&=(ENUM_TYPE& lhs, ENUM_TYPE rhs) noexcept { \
53 return lhs = (lhs & rhs); \
55inline ENUM_TYPE& operator^=(ENUM_TYPE& lhs, ENUM_TYPE rhs) noexcept { \
56 return lhs = (lhs ^ rhs); \
73 std::vector<std::string>
convertUrlMapToVector(
const std::unordered_map<std::string, std::string>& urls)
noexcept;
84 std::vector<std::
byte>
readFileBytes(const std::filesystem::path& path) noexcept;
102 bool writeFileBytes(
const std::filesystem::path& path,
const std::vector<std::byte>& bytes,
bool overwrite =
true) noexcept;
Definition codehelpers.h:60
const T & unmove(T &&t) noexcept
Unmoves a value.
Definition codehelpers.h:91
std::string getLastSystemError() noexcept
Get the last system api call error message.
size_t combineHash(size_t a, size_t b) noexcept
Combines two hash values together.
std::vector< std::string > convertUrlMapToVector(const std::unordered_map< std::string, std::string > &urls) noexcept
Converts a map of URLs to a vector.
std::vector< std::byte > readFileBytes(const std::filesystem::path &path) noexcept
Reads a file as a vector of bytes.
bool writeFileBytes(const std::filesystem::path &path, const std::vector< std::byte > &bytes, bool overwrite=true) noexcept
Writes a vector of bytes to a file.