A simple evaluator that verifies if a given version satisfies some logical expression like:
version:<=2.15.0 AND NOT version:=2.12.2 AND NOT version:=2.12.3
Supported Boolean operators are NOT, AND and OR, listed by precedence, from highest to lowest. For version comparisons, operators ==, = (both for equal to), != (not equal to), <, <=, > and >= are supported.
Argument passed to parse function should be a string with expression and function returns std::unique_ptr<expression_t>, a pointer to final expression object. evaluate method on this object, with version to test passed, checks if the version satisfies expression. For example:
auto expression = parse("version:<=2.15.0 AND NOT version:=2.12.2 AND NOT version:=2.12.3");
expression->evaluate(version_t{ "2.12.1" }); // returns true
expression->evaluate(version_t{ "2.15.0" }); // returns true
expression->evaluate(version_t{ "2.12.2" }); // returns false
expression->evaluate(version_t{ "2.12.3" }); // returns false