ROOT
ROOT project
Loading...
Searching...
No Matches
function_parser.hpp
Go to the documentation of this file.
1
14#ifndef FUNCTION_HPP
15#define FUNCTION_HPP
16
17#include <functional>
18#include <string>
19
28 public:
29 virtual ~FunctionParserBase() = default;
35 virtual std::function<double(double)> parse() = 0;
36
46 static std::function<double(double)> parseFunction(const std::string& function_str);
47
54 static bool isPolynomial(const std::string& expression);
61 static bool isTrigonometric(const std::string& expression);
68
69 protected:
70 std::string function_str;
78 static bool icontains(const std::string& hay, const std::string& needle);
85 static std::string removeSpaces(const std::string& function_str);
92 static std::vector<std::string> splitSignTokens(const std::string& expr_no_ws);
99 static std::pair<double, std::string> parseOptionalCoefficient(const std::string& token);
100
101 private:
103};
104
111 public:
117 PolynomialParser(std::string function_str);
123 std::function<double(double)> parse() override;
124
125 private:
134 static bool parseTokenAsPolyTerm(const std::string& raw_token, std::function<double(double)>& out_term);
135};
136
143 public:
155 std::function<double(double)> parse() override;
156
157 private:
166 static bool parseTokenAsTrigTerm(const std::string& raw_token, std::function<double(double)>& out_term);
167};
168
169#endif // FUNCTION_HPP
Test fixture class for FunctionParserBase unit tests.
Definition function_parser_base_tester.hpp:12
Base class for function parsers.
Definition function_parser.hpp:27
static std::pair< double, std::string > parseOptionalCoefficient(const std::string &token)
Helper static method to parse an optional coefficient from a token.
Definition function_parser.cpp:66
static std::function< double(double)> parseFunction(const std::string &function_str)
Static method to parse a function string and return a callable function.
Definition function_parser.cpp:234
static std::string removeSpaces(const std::string &function_str)
Helper static method to remove all whitespace from a string.
Definition function_parser.cpp:37
static bool isTrigonometric(const std::string &expression)
Static method to check if the expression is a trigonometric function.
Definition function_parser.cpp:22
virtual ~FunctionParserBase()=default
virtual std::function< double(double)> parse()=0
Pure virtual method to parse the function string.
static std::vector< std::string > splitSignTokens(const std::string &expr_no_ws)
Helper static method to split an expression into tokens based on sign characters.
Definition function_parser.cpp:48
static bool isPolynomial(const std::string &expression)
Static method to check if the expression is a polynomial.
Definition function_parser.cpp:15
std::string function_str
The function string to be parsed.
Definition function_parser.hpp:70
static bool icontains(const std::string &hay, const std::string &needle)
Helper static method to check if a string contains a substring (case-insensitive).
Definition function_parser.cpp:29
Test fixture class for PolynomialParser unit tests.
Definition polynomial_parser_tester.hpp:12
Parser class for polynomial functions.
Definition function_parser.hpp:110
std::function< double(double)> parse() override
Parse the polynomial function string.
Definition function_parser.cpp:132
static bool parseTokenAsPolyTerm(const std::string &raw_token, std::function< double(double)> &out_term)
Helper static method to parse a token as a polynomial term.
Definition function_parser.cpp:80
Test fixture class for TrigonometricParser unit tests.
Definition trigonometric_parser_tester.hpp:12
Parser class for trigonometric functions.
Definition function_parser.hpp:142
static bool parseTokenAsTrigTerm(const std::string &raw_token, std::function< double(double)> &out_term)
Helper static method to parse a token as a trigonometric term.
Definition function_parser.cpp:158
std::function< double(double)> parse() override
Parse the trigonometric function string.
Definition function_parser.cpp:210