@@ -11,11 +11,43 @@ struct TesterFactory
1111 {
1212 return std::make_shared<F>(std::move (params));
1313 }
14+
15+ template <typename ... Args>
16+ static IsExpression::TesterFactoryFn MakeCreator (Args&& ... args)
17+ {
18+ return [args...](TesterParams params) {return std::make_shared<F>(std::move (params), args...);};
19+ }
1420};
1521
1622std::unordered_map<std::string, IsExpression::TesterFactoryFn> s_testers = {
17- {" defined" , & TesterFactory<testers::Defined >::Create },
23+ {" defined" , TesterFactory<testers::ValueTester >::MakeCreator (testers::ValueTester::IsDefinedMode) },
1824 {" startsWith" , &TesterFactory<testers::StartsWith>::Create},
25+ {" eq" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalEq)},
26+ {" ==" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalEq)},
27+ {" equalto" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalEq)},
28+ {" even" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsEvenMode)},
29+ {" ge" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalGe)},
30+ {" >=" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalGe)},
31+ {" gt" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalGt)},
32+ {" >" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalGt)},
33+ {" greaterthan" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalGt)},
34+ {" in" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsInMode)},
35+ {" iterable" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsIterableMode)},
36+ {" le" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalLe)},
37+ {" <=" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalLe)},
38+ {" lower" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsLowerMode)},
39+ {" lt" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalLt)},
40+ {" <" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalLt)},
41+ {" lessthan" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalLt)},
42+ {" mapping" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsMappingMode)},
43+ {" ne" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalNe)},
44+ {" !=" , TesterFactory<testers::Comparator>::MakeCreator (BinaryExpression::LogicalNe)},
45+ {" number" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsNumberMode)},
46+ {" odd" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsOddMode)},
47+ {" sequence" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsSequenceMode)},
48+ {" string" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsStringMode)},
49+ {" undefined" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsUndefinedMode)},
50+ {" upper" , TesterFactory<testers::ValueTester>::MakeCreator (testers::ValueTester::IsUpperMode)},
1951};
2052
2153TesterPtr CreateTester (std::string testerName, CallParams params)
@@ -30,10 +62,26 @@ TesterPtr CreateTester(std::string testerName, CallParams params)
3062namespace testers
3163{
3264
65+ Comparator::Comparator (TesterParams params, BinaryExpression::Operation op)
66+ : m_op(op)
67+ {
68+ ParseParams ({{" b" , true }}, params);
69+ }
70+
71+ bool Comparator::Test (const InternalValue& baseVal, RenderContext& context)
72+ {
73+ auto b = GetArgumentValue (" b" , context);
74+
75+ auto cmpRes = Apply2<visitors::BinaryMathOperation>(baseVal, b, m_op);
76+ return ConvertToBool (cmpRes);
77+ }
78+
79+ #if 0
3380bool Defined::Test(const InternalValue& baseVal, RenderContext& /*context*/)
3481{
3582 return boost::get<EmptyValue>(&baseVal) == nullptr;
3683}
84+ #endif
3785
3886StartsWith::StartsWith (TesterParams params)
3987{
@@ -50,5 +98,14 @@ bool StartsWith::Test(const InternalValue& baseVal, RenderContext& context)
5098 return baseStr.find (str) == 0 ;
5199}
52100
101+ ValueTester::ValueTester (TesterParams params, ValueTester::Mode mode)
102+ : m_mode(mode)
103+ {}
104+
105+ bool ValueTester::Test (const InternalValue& baseVal, RenderContext& context)
106+ {
107+ return false ;
108+ }
109+
53110}
54111}
0 commit comments