utilities: fix refl::calcFieldCount for enum

add unordered_vector utility
modernize hexdump
This commit is contained in:
DH 2024-10-31 22:57:08 +03:00
parent 7d0f277ad5
commit b012964099
3 changed files with 47 additions and 17 deletions

View file

@ -139,11 +139,11 @@ constexpr auto calcFieldCount() {
} else {
constexpr auto c = getNameOf<EnumT(N)>()[0];
if constexpr (requires { EnumT::Count; }) {
return EnumT::Count;
return static_cast<std::size_t>(EnumT::Count);
} else if constexpr (requires { EnumT::_count; }) {
return EnumT::_count;
return static_cast<std::size_t>(EnumT::_count);
} else if constexpr (requires { EnumT::count; }) {
return EnumT::count;
return static_cast<std::size_t>(EnumT::count);
} else if constexpr (!requires { getNameOf<EnumT(N)>()[0]; }) {
return N;
} else if constexpr (c >= '0' && c <= '9') {

View file

@ -0,0 +1,29 @@
#pragma once
#include <cstddef>
#include <utility>
namespace rx {
template <typename VectorT>
void unordered_vector_erase(VectorT &vector, std::size_t pos) {
if (pos + 1 == vector.size()) {
vector.pop_back();
return;
}
std::swap(vector[pos], vector.back());
vector.pop_back();
}
template <typename VectorT, typename Value>
void unordered_vector_insert(VectorT &vector, std::size_t pos, Value &&value) {
bool isLast = pos + 1 == vector.size();
vector.push_back(std::move(value));
if (isLast) {
return;
}
std::swap(vector[pos], vector.back());
}
} // namespace rx