Skip to content

Commit b3e53f7

Browse files
committed
feat: enhance ParameterRegistry with regex patterns and improve destructor visibility
1 parent 5f8c591 commit b3e53f7

File tree

2 files changed

+25
-19
lines changed

2 files changed

+25
-19
lines changed

cucumber_cpp/library/cucumber_expression/ParameterRegistry.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ namespace cucumber_cpp::library::cucumber_expression
3838
return str;
3939
};
4040
}
41+
42+
const std::string integerNegativeRegex{ R"__(-?\d+)__" };
43+
const std::string integerPositiveRegex{ R"__(\d+)__" };
44+
const std::string floatRegex{ R"__((?=.*\d.*)[-+]?\d*(?:\.(?=\d.*))?\d*(?:\d+[E][+-]?\d+)?)__" };
45+
const std::string stringDoubleRegex{ R"__("([^\"\\]*(\\.[^\"\\]*)*)")__" };
46+
const std::string stringSingleRegex{ R"__('([^'\\]*(\\.[^'\\]*)*)')__" };
47+
const std::string wordRegex{ R"__([^\s]+)__" };
4148
}
4249

4350
std::smatch::const_iterator MatchRange::begin() const
@@ -62,27 +69,20 @@ namespace cucumber_cpp::library::cucumber_expression
6269

6370
ParameterRegistry::ParameterRegistry()
6471
{
65-
const static std::string integerNegativeRegex{ R"__(-?\d+)__" };
66-
const static std::string integerPositiveRegex{ R"__(\d+)__" };
67-
const static std::string floatRegex{ R"__((?=.*\d.*)[-+]?\d*(?:\.(?=\d.*))?\d*(?:\d+[E][+-]?\d+)?)__" };
68-
const static std::string stringDoubleRegex{ R"__("([^\"\\]*(\\.[^\"\\]*)*)")__" };
69-
const static std::string stringSingleRegex{ R"__('([^'\\]*(\\.[^'\\]*)*)')__" };
70-
const static std::string wordRegex{ R"__([^\s]+)__" };
71-
72-
ParameterRegistry::Add("int", { integerNegativeRegex, integerPositiveRegex }, CreateStreamConverter<std::int32_t>());
73-
ParameterRegistry::Add("float", { floatRegex }, CreateStreamConverter<float>());
74-
ParameterRegistry::Add("word", { wordRegex }, CreateStreamConverter<std::string>());
75-
ParameterRegistry::Add("string", { stringDoubleRegex, stringSingleRegex }, CreateStringConverter());
76-
ParameterRegistry::Add("", { ".*" }, CreateStreamConverter<std::string>());
77-
ParameterRegistry::Add("bigdecimal", { floatRegex }, CreateStreamConverter<double>());
78-
ParameterRegistry::Add("biginteger", { { integerNegativeRegex, integerPositiveRegex } }, CreateStreamConverter<std::int64_t>());
79-
ParameterRegistry::Add("byte", { { integerNegativeRegex, integerPositiveRegex } }, CreateStreamConverter<std::int32_t>());
80-
ParameterRegistry::Add("short", { { integerNegativeRegex, integerPositiveRegex } }, CreateStreamConverter<std::int32_t>());
81-
ParameterRegistry::Add("long", { { integerNegativeRegex, integerPositiveRegex } }, CreateStreamConverter<std::int64_t>());
82-
ParameterRegistry::Add("double", { floatRegex }, CreateStreamConverter<double>());
72+
Add("int", { integerNegativeRegex, integerPositiveRegex }, CreateStreamConverter<std::int32_t>());
73+
Add("float", { floatRegex }, CreateStreamConverter<float>());
74+
Add("word", { wordRegex }, CreateStreamConverter<std::string>());
75+
Add("string", { stringDoubleRegex, stringSingleRegex }, CreateStringConverter());
76+
Add("", { ".*" }, CreateStreamConverter<std::string>());
77+
Add("bigdecimal", { floatRegex }, CreateStreamConverter<double>());
78+
Add("biginteger", { { integerNegativeRegex, integerPositiveRegex } }, CreateStreamConverter<std::int64_t>());
79+
Add("byte", { { integerNegativeRegex, integerPositiveRegex } }, CreateStreamConverter<std::int32_t>());
80+
Add("short", { { integerNegativeRegex, integerPositiveRegex } }, CreateStreamConverter<std::int32_t>());
81+
Add("long", { { integerNegativeRegex, integerPositiveRegex } }, CreateStreamConverter<std::int64_t>());
82+
Add("double", { floatRegex }, CreateStreamConverter<double>());
8383

8484
// extension
85-
ParameterRegistry::Add("bool", { wordRegex }, CreateStreamConverter<bool>());
85+
Add("bool", { wordRegex }, CreateStreamConverter<bool>());
8686
}
8787

8888
Parameter ParameterRegistry::Lookup(const std::string& name) const

cucumber_cpp/library/cucumber_expression/ParameterRegistry.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,13 +122,19 @@ namespace cucumber_cpp::library::cucumber_expression
122122

123123
struct ParameterRegistration
124124
{
125+
protected:
126+
~ParameterRegistration() = default;
127+
128+
public:
125129
virtual void Add(std::string name, std::vector<std::string> regex, std::function<std::any(MatchRange)> converter) = 0;
126130
};
127131

128132
struct ParameterRegistry : ParameterRegistration
129133
{
130134
ParameterRegistry();
131135

136+
virtual ~ParameterRegistry() = default;
137+
132138
Parameter Lookup(const std::string& name) const;
133139
void Add(std::string name, std::vector<std::string> regex, std::function<std::any(MatchRange)> converter) override;
134140

0 commit comments

Comments
 (0)