4 Commits

Author SHA1 Message Date
Javi 51cf1887cd Fix just my code 2024-07-07 01:38:08 +02:00
Javi 7539eed0b0 Fix TL step filter 2024-07-07 01:36:35 +02:00
Javi 932e770687 Add TL_ONLY_IN_DEBUG macro 2024-07-04 15:54:49 +02:00
Javi f5c6b75621 Remove optional semantics from identifier 2024-07-04 10:53:37 +02:00
5 changed files with 22 additions and 42 deletions
-24
View File
@@ -1,24 +0,0 @@
#pragma once
#include "tl/functional.h"
namespace tl
{
class epilogue
{
public:
epilogue(function<void()> i_function) noexcept
: m_function(std::move(i_function))
{
}
~epilogue() noexcept
{
m_function();
}
private:
function<void()> m_function;
};
}
+13 -16
View File
@@ -7,46 +7,43 @@
namespace tl namespace tl
{ {
template<typename T, T invalid_value, typename Tag> template<typename T, typename Tag>
struct identifier struct identifier
{ {
using underlying_type = T; using underlying_type = T;
constexpr identifier() noexcept = default; identifier() = delete;
explicit constexpr identifier(T value) noexcept : m_value(std::move(value)) {} explicit constexpr identifier(T value) noexcept : m_value(std::move(value)) {}
constexpr T value() const noexcept { return m_value; } constexpr T value() const noexcept { return m_value; }
constexpr bool is_valid() const noexcept { return m_value != invalid_value; } auto operator<=>(const identifier<T, Tag>& other) const noexcept { return m_value <=> other.value(); }
//inline static identifier<T, invalid_value, Tag> invalid() noexcept { return identifier<T, invalid_value, Tag>(); }
auto operator<=>(const identifier<T, invalid_value, Tag>& other) const noexcept { return m_value <=> other.value(); }
auto operator<=>(const T& other) const noexcept { return m_value <=> other; } auto operator<=>(const T& other) const noexcept { return m_value <=> other; }
bool operator==(const identifier<T, invalid_value, Tag>& other) const noexcept { return m_value == other.value(); } bool operator==(const identifier<T, Tag>& other) const noexcept { return m_value == other.value(); }
bool operator==(const T& other) const noexcept { return m_value == other; } bool operator==(const T& other) const noexcept { return m_value == other; }
private: private:
T m_value = invalid_value; T m_value;
}; };
} }
#define TL_DECLARE_INTEGRAL_ID(NAME, TYPE, INVALID_VALUE) \ #define TL_DECLARE_INTEGRAL_ID(NAME, TYPE) \
struct NAME##_tag {};\ struct NAME##_tag {};\
using NAME = tl::identifier<TYPE, INVALID_VALUE, NAME##_tag>; using NAME = tl::identifier<TYPE, NAME##_tag>;
template <typename T, T invalid_value, typename Tag> template <typename T, typename Tag>
struct std::formatter<tl::identifier<T, invalid_value, Tag>> struct std::formatter<tl::identifier<T, Tag>>
{ {
constexpr auto parse(format_parse_context& ctx) noexcept { return ctx.begin(); } constexpr auto parse(format_parse_context& ctx) noexcept { return ctx.begin(); }
auto format(const tl::identifier<T, invalid_value, Tag>& id, std::format_context& ctx) const auto format(const tl::identifier<T, Tag>& id, std::format_context& ctx) const
{ {
return format_to(ctx.out(), "{}", id.value()); return format_to(ctx.out(), "{}", id.value());
} }
}; };
template<typename T, T invalid_value, typename Tag> template<typename T, typename Tag>
struct eastl::hash<tl::identifier<T, invalid_value, Tag>> struct eastl::hash<tl::identifier<T, Tag>>
{ {
size_t operator()(tl::identifier<T, invalid_value, Tag> const& id) const size_t operator()(tl::identifier<T, Tag> const& id) const
{ {
return hash<T>()(id.value()); return hash<T>()(id.value());
} }
+7
View File
@@ -0,0 +1,7 @@
#pragma once
#ifdef _DEBUG
#define TL_ONLY_IN_DEBUG(...) __VA_ARGS__
#else
#define TL_ONLY_IN_DEBUG(...)
#endif
+1 -1
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<NonUserCode xmlns="http://schemas.microsoft.com/vstudio/debugger/jmc/2013"> <NonUserCode xmlns="http://schemas.microsoft.com/vstudio/debugger/jmc/2013">
<File Name="*\jtl\*" /> <File Name="*\tl\*" />
</NonUserCode> </NonUserCode>
+1 -1
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010"> <StepFilter xmlns="http://schemas.microsoft.com/vstudio/debugger/natstepfilter/2010">
<Function><Name>jtl::.*</Name><Action>NoStepInto</Action></Function> <Function><Name>tl::.*</Name><Action>NoStepInto</Action></Function>
</StepFilter> </StepFilter>