Skip to content

Commit d8e114e

Browse files
konardclaude
andcommitted
Refactor LinksConstants to use template type parameters instead of non-type template parameters
- Changed LinksOptions template parameter from `LinksConstants<TLinkAddress> VConstants` to `typename TLinksConstants` - Updated LinksConstantsExtensions functions to use template type parameters - Added LinkAddressType alias to LinksConstants struct for better type support - Updated ILinks to properly handle new LinksConstantsType - Updated test files to use new template pattern This change allows passing LinksConstants as a type (`typename TLinksConstants`) instead of as an instance/value, providing better flexibility and type safety. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent cdd799c commit d8e114e

5 files changed

Lines changed: 20 additions & 15 deletions

File tree

cpp/Platform.Data.Tests/ILinksTests.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
namespace Platform::Data::Tests
22
{
3-
template<std::integral TLinkAddress = std::uint64_t, LinksConstants<TLinkAddress> VConstants = LinksConstants<TLinkAddress>{true}, typename TLink = std::vector<TLinkAddress>, typename TReadHandler = std::function<TLinkAddress(TLink)>, typename TWriteHandler = std::function<TLinkAddress(TLink, TLink)>>
4-
struct Links : public ILinks<LinksOptions<TLinkAddress, VConstants, TLink,TReadHandler, TWriteHandler>>
3+
template<std::integral TLinkAddress = std::uint64_t, typename TLinksConstants = LinksConstants<TLinkAddress>, typename TLink = std::vector<TLinkAddress>, typename TReadHandler = std::function<TLinkAddress(TLink)>, typename TWriteHandler = std::function<TLinkAddress(TLink, TLink)>>
4+
struct Links : public ILinks<LinksOptions<TLinkAddress, TLinksConstants, TLink,TReadHandler, TWriteHandler>>
55
{
6-
using base = ILinks<LinksOptions<TLinkAddress, VConstants, TLink, TReadHandler, TWriteHandler>>;
6+
using base = ILinks<LinksOptions<TLinkAddress, TLinksConstants, TLink, TReadHandler, TWriteHandler>>;
77
using typename base::LinkAddressType;
88
using typename base::LinkType;
99
using typename base::WriteHandlerType;

cpp/Platform.Data/ILinks.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
public:
88
using LinksOptionsType = TLinksOptions;
99
using LinkAddressType = typename LinksOptionsType::LinkAddressType;
10-
static constexpr LinksConstants<LinkAddressType> Constants = LinksOptionsType::Constants;
10+
using LinksConstantsType = typename LinksOptionsType::LinksConstantsType;
11+
static constexpr LinksConstantsType Constants = LinksOptionsType::Constants;
1112
using LinkType = typename LinksOptionsType::LinkType;
1213
using ReadHandlerType = typename LinksOptionsType::ReadHandlerType;
1314
using WriteHandlerType = typename LinksOptionsType::WriteHandlerType;

cpp/Platform.Data/LinksConstants.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
template<std::integral TLinkAddress>
44
struct LinksConstants
55
{
6+
using LinkAddressType = TLinkAddress;
67
static constexpr int DefaultTargetPart = 2;
78
public:
89
const TLinkAddress IndexPart{};
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
namespace Platform::Data
22
{
3-
template <typename TLinkAddress, LinksConstants<TLinkAddress> VLinksConstants>
4-
static bool IsInternalReference(TLinkAddress linkAddress) noexcept
3+
template <typename TLinksConstants>
4+
static bool IsInternalReference(typename TLinksConstants::LinkAddressType linkAddress) noexcept
55
{
6-
return VLinksConstants.InternalReferencesRange.Contains(linkAddress);
6+
static constexpr TLinksConstants constants{true};
7+
return constants.InternalReferencesRange.Contains(linkAddress);
78
}
89

9-
template <typename TLinkAddress, LinksConstants<TLinkAddress> VLinksConstants>
10-
static bool IsReference(TLinkAddress linkAddress) noexcept
10+
template <typename TLinksConstants>
11+
static bool IsReference(typename TLinksConstants::LinkAddressType linkAddress) noexcept
1112
{
12-
return IsInternalReference(VLinksConstants, linkAddress) || IsExternalReference(VLinksConstants, linkAddress);
13+
return IsInternalReference<TLinksConstants>(linkAddress) || IsExternalReference<TLinksConstants>(linkAddress);
1314
}
1415

15-
template <typename TLinkAddress, LinksConstants<TLinkAddress> VLinksConstants>
16-
static bool IsExternalReference(TLinkAddress linkAddress) noexcept
16+
template <typename TLinksConstants>
17+
static bool IsExternalReference(typename TLinksConstants::LinkAddressType linkAddress) noexcept
1718
{
18-
auto&& range = VLinksConstants.ExternalReferencesRange;
19+
static constexpr TLinksConstants constants{true};
20+
auto&& range = constants.ExternalReferencesRange;
1921
return range.Contains(linkAddress);
2022
}
2123
}

cpp/Platform.Data/LinksOptions.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
namespace Platform::Data
22
{
33

4-
template<std::integral TLinkAddress = std::uint64_t, LinksConstants<TLinkAddress> VConstants = LinksConstants<TLinkAddress>{true}, typename TLink = std::vector<TLinkAddress>, typename TReadHandler = std::function<TLinkAddress(TLink)>, typename TWriteHandler = std::function<TLinkAddress(TLink, TLink)>>
4+
template<std::integral TLinkAddress = std::uint64_t, typename TLinksConstants = LinksConstants<TLinkAddress>, typename TLink = std::vector<TLinkAddress>, typename TReadHandler = std::function<TLinkAddress(TLink)>, typename TWriteHandler = std::function<TLinkAddress(TLink, TLink)>>
55
struct LinksOptions
66
{
77
using LinkAddressType = TLinkAddress;
88
using LinkType = TLink;
99
using ReadHandlerType = TReadHandler;
1010
using WriteHandlerType = TWriteHandler;
11-
static constexpr LinksConstants<LinkAddressType> Constants = VConstants;
11+
using LinksConstantsType = TLinksConstants;
12+
static constexpr TLinksConstants Constants{true};
1213
};
1314

1415
// template<typename ...>

0 commit comments

Comments
 (0)