tcalc 0.2.0
 
Loading...
Searching...
No Matches
builtins.hpp
Go to the documentation of this file.
1
12#pragma once
13
14#include <cmath> // IWYU pragma: keep
15#include <functional>
16#include <unordered_map>
17#include <vector>
18
20#include "tcalc/ast/node.hpp"
21#include "tcalc/ast/program.hpp"
22#include "tcalc/common.hpp"
23#include "tcalc/error.hpp"
24
25namespace tcalc {
26
27class EvalContext;
28
29}
30
31namespace tcalc::builtins {
32
37using Function = std::function<error::Result<double>(const std::vector<double>&,
38 const EvalContext&)>;
39
44class TCALC_PUBLIC FunctionWrapper
45{
46private:
48
49public:
56 : _node{ std::move(node) }
57 {
58 }
59
60 ~FunctionWrapper() = default;
61
69 error::Result<double> operator()(const std::vector<double>& args,
70 const EvalContext& ctx) const;
71};
72
77class TCALC_PUBLIC ImportWrapper
78{
79private:
81
82public:
89 : _node{ std::move(node) }
90 {
91 }
92
93 ~ImportWrapper() = default;
94
101 error::Result<void> import(EvalContext& ctx) const;
102};
103
110TCALC_PUBLIC error::Result<double>
111sqrt(const std::vector<double>& args, const EvalContext& ctx);
112
119TCALC_PUBLIC error::Result<double>
120pow(const std::vector<double>& args, const EvalContext& ctx);
121
129TCALC_PUBLIC error::Result<double>
130log(const std::vector<double>& args, const EvalContext& ctx);
131
139TCALC_PUBLIC error::Result<double>
140sin(const std::vector<double>& args, const EvalContext& ctx);
141
149TCALC_PUBLIC error::Result<double>
150cos(const std::vector<double>& args, const EvalContext& ctx);
151
159TCALC_PUBLIC error::Result<double>
160tan(const std::vector<double>& args, const EvalContext& ctx);
161
169TCALC_PUBLIC error::Result<double>
170acos(const std::vector<double>& args, const EvalContext& ctx);
171
179TCALC_PUBLIC error::Result<double>
180asin(const std::vector<double>& args, const EvalContext& ctx);
181
189TCALC_PUBLIC error::Result<double>
190atan(const std::vector<double>& args, const EvalContext& ctx);
191
199TCALC_PUBLIC error::Result<double>
200exp(const std::vector<double>& args, const EvalContext& ctx);
201
202inline const std::unordered_map<std::string, double> BUILTIN_VARIABLES = {
203 { "pi", M_PI },
204 { "e", M_E },
205};
207inline const std::unordered_map<std::string, Function> BUILTIN_FUNCTIONS = {
208 { "sqrt", sqrt }, { "pow", pow }, { "log", log }, { "sin", sin },
209 { "cos", cos }, { "tan", tan }, { "acos", acos }, { "asin", asin },
210 { "atan", atan }, { "exp", exp }
211};
213}
TCALC_PUBLIC error::Result< double > asin(const std::vector< double > &args, const EvalContext &ctx)
Built-in asin function.
Definition builtins.cpp:146
TCALC_PUBLIC error::Result< double > exp(const std::vector< double > &args, const EvalContext &ctx)
Built-in exp function.
Definition builtins.cpp:170
const std::unordered_map< std::string, double > BUILTIN_VARIABLES
Definition builtins.hpp:202
TCALC_PUBLIC error::Result< double > log(const std::vector< double > &args, const EvalContext &ctx)
Built-in log function.
Definition builtins.cpp:86
TCALC_PUBLIC error::Result< double > sqrt(const std::vector< double > &args, const EvalContext &ctx)
Built-in sqrt function.
Definition builtins.cpp:62
TCALC_PUBLIC error::Result< double > tan(const std::vector< double > &args, const EvalContext &ctx)
Built-in tan function.
Definition builtins.cpp:122
TCALC_PUBLIC error::Result< double > acos(const std::vector< double > &args, const EvalContext &ctx)
Built-in acos function.
Definition builtins.cpp:134
const std::unordered_map< std::string, Function > BUILTIN_FUNCTIONS
Definition builtins.hpp:207
std::function< error::Result< double >(const std::vector< double > &, const EvalContext &)> Function
Built-in function type.
Definition builtins.hpp:38
TCALC_PUBLIC error::Result< double > sin(const std::vector< double > &args, const EvalContext &ctx)
Built-in sin function.
Definition builtins.cpp:98
TCALC_PUBLIC error::Result< double > pow(const std::vector< double > &args, const EvalContext &ctx)
Built-in pow function.
Definition builtins.cpp:74
TCALC_PUBLIC error::Result< double > cos(const std::vector< double > &args, const EvalContext &ctx)
Built-in cos function.
Definition builtins.cpp:110
TCALC_PUBLIC error::Result< double > atan(const std::vector< double > &args, const EvalContext &ctx)
Built-in atan function.
Definition builtins.cpp:158
Evaluation context which stores variables and built-in functions.
Definition eval.hpp:32
Wrapper for User-defined functions.
Definition builtins.hpp:45
FunctionWrapper(ast::NodePtr< ast::FdefNode > node)
Construct a new Function Wrapper object.
Definition builtins.hpp:55
Wrapper for ProgramImportNode.
Definition builtins.hpp:78
ImportWrapper(ast::NodePtr< ast::ProgramImportNode > node)
Construct a new Import Wrapper object.
Definition builtins.hpp:88
tcalc common header.
tcalc error definition.
_TCALC_EXPECTED_NS::expected< T, Error > Result
Result type.
Definition error.hpp:153
Function node.
Base class for AST nodes.
std::shared_ptr< NT > NodePtr
Shared pointer to a node.
Definition node.hpp:119
Program node.