10 #include "../utils/runtime_error.h" 17 const std::tuple<Str,Str,Json> &compare_expr_)
25 const Vec<std::tuple<Str,Str,Json>> &compare_expr_list_)
38 return [rval](
const Json &j) {
44 return [rval](
const Json &j) {
48 else if (oper ==
"<=")
50 return [rval](
const Json &j) {
54 else if (oper ==
">=")
56 return [rval](
const Json &j) {
60 else if (oper ==
"==")
62 return [rval](
const Json &j) {
66 else if (oper ==
"!=")
68 return [rval](
const Json &j) {
75 "Supported operators for comparison are " 76 "'<', '>', '<=', '>=', '==' and '!='");
88 auto &datakey = std::get<0>(item);
89 auto &compare_oper = std::get<1>(item);
90 auto &target_val = std::get<2>(item);
92 compare_func_list.push_back(std::make_pair(
96 return compare_func_list;
102 const Json &elem_in_data,
105 for (
const auto &item : compare_func_list)
107 if (!item.second(elem_in_data[item.first]))
return false;
122 for (
const auto &item : compare_func_list)
124 check_required_keys(item.first);
127 Json passing_data = Json::array();
129 for (
const auto &d : data)
133 passing_data.push_back(d);
137 data.swap(passing_data);
FilComparison(const std::tuple< Str, Str, Json > &compare_expr_)
Constructor of FilComparison class with one criterion.
virtual void compute_impl(Json &data, JsonToVoidFunc check_required_keys, JsonToBoolFunc check_optional_keys) override
This method overrides Updater::compute_impl.
This file has a definition of FilComparison class, which is a subclass of Filter class.
std::function< bool(const Json &)> JsonToBoolFunc
An alias for a function accepts a Json object and returns a bool.
std::string Str
Str is an alias for string.
const JsonToBoolFunc make_compare_func(const Str &oper, const Json &rval)
Make a JsonToBoolFunc object from a comparison operator and a right side value.
nlohmann::json Json
Json is an alias for nlohmann::json.
std::vector< T > Vec
Vec is an alias for vector (same as list in Python).
const CompareFuncs make_compare_func_list()
Convert tuples in compare_expr_list to pairs of a string key and JsonToBoolFunc.
const bool check_if_pass_data_elem(const Json &elem_in_data, const CompareFuncs &compare_func_list)
Check if an element in data array can pass this filter.
Vec< std::tuple< Str, Str, Json > > compare_expr_list
void runtime_error(const Str &msg)
Raise (for Python) and throw (for C++) a runtime error.
Namespace for utility functions.
std::function< void(const Json &)> JsonToVoidFunc
An alias for a function accepts a Json object.
Vec< std::pair< Str, JsonToBoolFunc > > CompareFuncs
An alias for Vec containing comparing functions.