Skip to content

Commit 76ed6f4

Browse files
committed
refactored Parameter
1 parent 811ac18 commit 76ed6f4

File tree

3 files changed

+45
-30
lines changed

3 files changed

+45
-30
lines changed

cucumber_cpp/library/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ target_sources(cucumber_cpp.library PRIVATE
1313
HookRegistry.cpp
1414
HookRegistry.hpp
1515
Hooks.hpp
16+
Parameter.cpp
17+
Parameter.hpp
1618
Query.cpp
1719
Query.hpp
1820
Rtrim.cpp

cucumber_cpp/library/Parameter.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include "cucumber_cpp/CucumberCpp.hpp"
2+
#include <compare>
3+
#include <set>
4+
#include <tuple>
5+
6+
namespace cucumber_cpp::library
7+
{
8+
std::strong_ordering ParameterEntry::operator<=>(const ParameterEntry& other) const
9+
{
10+
return std::tie(params.name, params.regex) <=> std::tie(other.params.name, other.params.regex);
11+
}
12+
13+
ParameterRegistration& ParameterRegistration::Instance()
14+
{
15+
static ParameterRegistration instance;
16+
return instance;
17+
}
18+
19+
const std::set<ParameterEntry>& ParameterRegistration::GetRegisteredParameters() const
20+
{
21+
return customParameters;
22+
}
23+
24+
}

cucumber_cpp/library/Parameter.hpp

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,15 @@
55
// IWYU pragma: friend cucumber_cpp/.*
66

77
#include "cucumber/messages/group.hpp"
8-
#include "cucumber_cpp/library/cucumber_expression/MatchRange.hpp"
98
#include "cucumber_cpp/library/cucumber_expression/ParameterRegistry.hpp"
10-
#include <any>
9+
#include <compare>
1110
#include <cstddef>
12-
#include <functional>
1311
#include <set>
1412
#include <source_location>
1513
#include <string>
16-
#include <string_view>
17-
#include <tuple>
18-
#include <utility>
1914

2015
namespace cucumber_cpp::library
2116
{
22-
using ToStringFn = std::function<cucumber::messages::group(cucumber_expression::MatchRange)>;
23-
using ToAnyFn = std::function<std::any(const cucumber::messages::group&)>;
24-
2517
struct ParameterEntryParams
2618
{
2719
std::string name;
@@ -37,10 +29,7 @@ namespace cucumber_cpp::library
3729

3830
std::source_location location;
3931

40-
auto operator<=>(const ParameterEntry& other) const
41-
{
42-
return std::tie(params.name, params.regex) <=> std::tie(other.params.name, other.params.regex);
43-
}
32+
std::strong_ordering operator<=>(const ParameterEntry& other) const;
4433
};
4534

4635
struct ParameterRegistration
@@ -49,30 +38,30 @@ namespace cucumber_cpp::library
4938
ParameterRegistration() = default;
5039

5140
public:
52-
static ParameterRegistration& Instance()
53-
{
54-
static ParameterRegistration instance;
55-
return instance;
56-
}
41+
static ParameterRegistration& Instance();
5742

5843
template<class Transformer, class TReturn>
59-
std::size_t Register(ParameterEntryParams params, std::source_location location = std::source_location::current())
60-
{
61-
customParameters.emplace(params, customParameters.size() + 1, location);
62-
63-
cucumber_expression::ConverterTypeMap<TReturn>::Instance()[params.name] = Transformer::Transform;
44+
std::size_t Register(ParameterEntryParams params, std::source_location location = std::source_location::current());
6445

65-
return customParameters.size();
66-
}
67-
68-
const std::set<ParameterEntry>& GetRegisteredParameters() const
69-
{
70-
return customParameters;
71-
}
46+
const std::set<ParameterEntry>& GetRegisteredParameters() const;
7247

7348
private:
7449
std::set<ParameterEntry> customParameters;
7550
};
51+
52+
////////////////////
53+
// Implementation //
54+
////////////////////
55+
56+
template<class Transformer, class TReturn>
57+
std::size_t ParameterRegistration::Register(ParameterEntryParams params, std::source_location location)
58+
{
59+
customParameters.emplace(params, customParameters.size() + 1, location);
60+
61+
cucumber_expression::ConverterTypeMap<TReturn>::Instance()[params.name] = Transformer::Transform;
62+
63+
return customParameters.size();
64+
}
7665
}
7766

7867
#define PARAMETER_STRUCT CONCAT(ParameterImpl, __LINE__)

0 commit comments

Comments
 (0)