concepts: fix review notes
Some checks are pending
Build RPCS3 / RPCS3 Linux ubuntu-24.04-arm clang (push) Waiting to run
Build RPCS3 / RPCS3 Linux ubuntu-24.04 clang (push) Waiting to run
Build RPCS3 / RPCS3 Linux ubuntu-24.04 gcc (push) Waiting to run
Build RPCS3 / RPCS3 Windows (push) Waiting to run

This commit is contained in:
oltolm 2025-02-25 18:43:07 +01:00 committed by Elad
parent ebde5310b9
commit 29ad4ecc78
6 changed files with 23 additions and 19 deletions

View file

@ -1,5 +1,6 @@
#pragma once // No BOM and only basic ASCII in this header, or a neko will die
#include "util/serialization.hpp"
#include "util/types.hpp"
#include "util/shared_ptr.hpp"
#include "bit_set.h"
@ -78,6 +79,8 @@ namespace fs
constexpr bool operator==(const stat_t&) const = default;
};
static_assert(utils::Bitcopy<stat_t>);
// Helper, layout is equal to iovec struct
struct iovec_clone
{
@ -126,6 +129,8 @@ namespace fs
using enable_bitcopy = std::false_type;
};
static_assert(!utils::Bitcopy<dir_entry>);
// Directory handle base
struct dir_base
{

View file

@ -130,7 +130,7 @@ struct fmt_unveil<se_t<T, Se, Align>>
};
// String type format provider, also type classifier (format() called if an argument is formatted as "%s")
template <typename T, typename = void>
template <typename T>
struct fmt_class_string
{
// Formatting function (must be explicitly specialized)
@ -215,7 +215,7 @@ struct fmt_class_string<T*> : fmt_class_string<const void*>
};
template <>
struct fmt_class_string<const char*, void>
struct fmt_class_string<const char*>
{
static void format(std::string& out, u64 arg);
};
@ -237,7 +237,7 @@ struct fmt_class_string<char8_t*> : fmt_class_string<const char8_t*>
};
template <>
struct fmt_class_string<const wchar_t*, void>
struct fmt_class_string<const wchar_t*>
{
static void format(std::string& out, u64 arg);
};
@ -257,7 +257,7 @@ namespace fmt
}
template <fmt::StringConvertible T>
struct fmt_class_string<T, void>
struct fmt_class_string<T>
{
static FORCE_INLINE SAFE_BUFFERS(const T&) get_object(u64 arg)
{
@ -278,7 +278,7 @@ namespace fmt
}
template <fmt::ByteArray T>
struct fmt_class_string<T, void>
struct fmt_class_string<T>
{
static FORCE_INLINE SAFE_BUFFERS(const T&) get_object(u64 arg)
{

View file

@ -1,5 +1,6 @@
#pragma once
#include "Emu/Memory/vm_ptr.h"
#include "cellVpost.h"
// Error Codes

View file

@ -441,37 +441,37 @@ struct fmt_unveil<vm::_ptr_base<T, AT>>
};
template <>
struct fmt_class_string<vm::_ptr_base<const void, u32>, void>
struct fmt_class_string<vm::_ptr_base<const void, u32>>
{
static void format(std::string& out, u64 arg);
};
template <typename T>
struct fmt_class_string<vm::_ptr_base<T, u32>, void> : fmt_class_string<vm::_ptr_base<const void, u32>, void>
struct fmt_class_string<vm::_ptr_base<T, u32>> : fmt_class_string<vm::_ptr_base<const void, u32>>
{
// Classify all pointers as const void*
};
template <>
struct fmt_class_string<vm::_ptr_base<const char, u32>, void>
struct fmt_class_string<vm::_ptr_base<const char, u32>>
{
static void format(std::string& out, u64 arg);
};
template <>
struct fmt_class_string<vm::_ptr_base<char, u32>, void> : fmt_class_string<vm::_ptr_base<const char, u32>>
struct fmt_class_string<vm::_ptr_base<char, u32>> : fmt_class_string<vm::_ptr_base<const char, u32>>
{
// Classify char* as const char*
};
template <usz Size>
struct fmt_class_string<vm::_ptr_base<const char[Size], u32>, void> : fmt_class_string<vm::_ptr_base<const char, u32>>
struct fmt_class_string<vm::_ptr_base<const char[Size], u32>> : fmt_class_string<vm::_ptr_base<const char, u32>>
{
// Classify const char[] as const char*
};
template <usz Size>
struct fmt_class_string<vm::_ptr_base<char[Size], u32>, void> : fmt_class_string<vm::_ptr_base<const char, u32>>
struct fmt_class_string<vm::_ptr_base<char[Size], u32>> : fmt_class_string<vm::_ptr_base<const char, u32>>
{
// Classify char[] as const char*
};

View file

@ -144,7 +144,7 @@ namespace stx
}
template <typename T>
requires requires(T& a, utils::serial& ar) { a.save(ar); }
requires requires(T& a, utils::serial& ar) { a.save(stx::exact_t<utils::serial&>(ar)); }
static void call_save(void* ptr, utils::serial& ar) noexcept
{
std::launder(static_cast<T*>(ptr))->save(stx::exact_t<utils::serial&>(ar));
@ -170,7 +170,7 @@ namespace stx
r.thread_op = &call_thread_op<T>;
}
if constexpr (!!(requires(T& a, utils::serial& ar) { a.save(ar); }))
if constexpr (!!(requires(T& a, utils::serial& ar) { a.save(stx::exact_t<utils::serial&>(ar)); }))
{
r.save = &call_save<T>;
}

View file

@ -18,9 +18,7 @@ namespace utils
};
template <typename T>
concept Bitcopy = (std::is_arithmetic_v<T>) || (std::is_enum_v<T>) || Integral<T> || requires() {
typename T::enable_bitcopy;
};
concept Bitcopy = (std::is_arithmetic_v<T>) || (std::is_enum_v<T>) || Integral<T> || typename T::enable_bitcopy()();
template <typename T>
concept TupleAlike = (!FastRandomAccess<T>) && requires ()
@ -29,8 +27,8 @@ namespace utils
};
template <typename T>
concept ListAlike = requires(std::remove_cvref_t<T>& obj, T::value_type item) { obj.insert(obj.end(), item); };
concept ListAlike = requires(std::remove_cvref_t<T>& obj, T::value_type item) { obj.insert(obj.end(), std::move(item)); };
struct serial;
struct serialization_file_handler
@ -123,7 +121,7 @@ public:
m_expect_little_data = value;
}
// Return true if small amounts of both input and output memory are expected (performance hint)
// Return true if small amounts of both input and output memory are expected (performance hint)
bool expect_little_data() const
{
return m_expect_little_data;
@ -427,7 +425,7 @@ public:
}
template <typename T>
requires requires(T& obj, utils::serial& ar) { (obj.*(&T::operator()))(ar); }
requires requires(T& obj, utils::serial& ar) { (obj.*(&T::operator()))(stx::exact_t<utils::serial&>(ar)); }
bool serialize(T& obj)
{
obj(*this);