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
2015namespace 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