KSeExpr 6.0.0.0
ExprFunc.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2011-2019 Disney Enterprises, Inc.
2// SPDX-License-Identifier: LicenseRef-Apache-2.0
3// SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me>
4// SPDX-License-Identifier: GPL-3.0-or-later
5
6#ifndef ExprFunc_h
7#define ExprFunc_h
8
9#include "Vec.h"
10#include <vector>
11
12#include "ExprEnv.h"
13#include "ExprFuncStandard.h"
14#include "ExprFuncX.h"
15#include "ExprType.h"
16
17
18namespace KSeExpr
19{
21
35{
36 static void initInternal(); // call to define built-in funcs
37public:
39 static void init();
41 static void cleanup();
42
43 /* A pointer to the define func is passed to the init method of
44 expression plugins. This should be called instead of calling
45 the static method directly so that the plugin will work if the
46 expression library is statically linked. */
47 static void define(const char *name, const ExprFunc &f, const char *docString);
48 static void define(const char *name, const ExprFunc &f);
49 using Define = void (*)(const char *, const ExprFunc &);
50 using Define3 = void (*)(const char *, const ExprFunc &, const char *);
51
53 static const ExprFunc *lookup(const std::string &name);
54
56 static void getFunctionNames(std::vector<std::string> &names);
57
59 static std::string getDocString(const char *functionName);
60
62 static size_t sizeInBytes();
63
65 static Statistics statistics();
66
67 // bool isScalar() const { return _scalar; };
68
69 ExprFunc() = default;
70
72 ExprFunc(ExprFuncX &f, int min = 1, int max = 1)
73 : _func(&f)
74 , _minargs(min)
75 , _maxargs(max) {};
76
82 : _standardFunc(ExprFuncStandard::FUNC1, (void *)f)
83 , _minargs(1)
84 , _maxargs(1)
85 {
86 }
88 : _standardFunc(ExprFuncStandard::FUNC2, (void *)f)
89 , _minargs(2)
90 , _maxargs(2)
91 {
92 }
94 : _standardFunc(ExprFuncStandard::FUNC3, (void *)f)
95 , _minargs(3)
96 , _maxargs(3)
97 {
98 }
100 : _standardFunc(ExprFuncStandard::FUNC4, (void *)f)
101 , _minargs(4)
102 , _maxargs(4)
103 {
104 }
106 : _standardFunc(ExprFuncStandard::FUNC5, (void *)f)
107 , _minargs(5) // NOLINT readability-magic-numbers
108 , _maxargs(5) // NOLINT readability-magic-numbers
109 {
110 }
112 : _standardFunc(ExprFuncStandard::FUNC6, (void *)f)
113 , _minargs(6) // NOLINT readability-magic-numbers
114 , _maxargs(6) // NOLINT readability-magic-numbers
115 {
116 }
124 : _standardFunc(ExprFuncStandard::FUNC1V, (void *)f)
125 , _minargs(1)
126 , _maxargs(1)
127 {
128 }
130 : _standardFunc(ExprFuncStandard::FUNC2V, (void *)f)
131 , _minargs(2)
132 , _maxargs(2)
133 {
134 }
142 : _standardFunc(ExprFuncStandard::FUNC1VV, (void *)f)
143 , _minargs(1)
144 , _maxargs(1)
145 {
146 }
148 : _standardFunc(ExprFuncStandard::FUNC2VV, (void *)f)
149 , _minargs(2)
150 , _maxargs(2)
151 {
152 }
154 : _standardFunc(ExprFuncStandard::FUNC1VV, (void *)f)
155 , _minargs(1)
156 , _maxargs(1)
157 {
158 }
165
167 int minArgs() const
168 {
169 return _minargs;
170 }
172 int maxArgs() const
173 {
174 return _maxargs;
175 }
177 const ExprFuncX *funcx() const
178 {
179 return _func ? _func : &_standardFunc;
180 }
181
182private:
184 ExprFuncX *_func {nullptr};
185 int _minargs {0};
186 int _maxargs {0};
187};
188} // namespace KSeExpr
189
190#endif
Extension function spec, used for complicated argument custom functions.
Definition ExprFuncX.h:23
Function Definition, used in parse tree and func table.
Definition ExprFunc.h:35
static void getFunctionNames(std::vector< std::string > &names)
Get a list of registered builtin and DSO generated functions.
Definition ExprFunc.cpp:166
const ExprFuncX * funcx() const
return pointer to the funcx
Definition ExprFunc.h:177
ExprFunc(ExprFuncStandard::Func4 *f)
Definition ExprFunc.h:99
static void define(const char *name, const ExprFunc &f, const char *docString)
Definition ExprFunc.cpp:158
ExprFunc(ExprFuncStandard::Funcnv *f, int minArgs, int maxArgs)
Definition ExprFunc.h:135
ExprFunc(ExprFuncStandard::Funcnvv *f)
Definition ExprFunc.h:153
ExprFunc(ExprFuncStandard::Func5 *f)
Definition ExprFunc.h:105
static size_t sizeInBytes()
Get the total size estimate of all plugins.
Definition ExprFunc.cpp:183
static void init()
call to define built-in funcs
Definition ExprFunc.cpp:104
ExprFunc()=default
static const ExprFunc * lookup(const std::string &name)
Lookup a builtin function by name.
Definition ExprFunc.cpp:116
ExprFunc(ExprFuncX &f, int min=1, int max=1)
User defined function with custom argument parsing.
Definition ExprFunc.h:72
int maxArgs() const
return the maximum number of acceptable arguments
Definition ExprFunc.h:172
static void initInternal()
Definition ExprFunc.cpp:139
ExprFunc(ExprFuncStandard::Func0 *f)
Definition ExprFunc.h:77
ExprFunc(ExprFuncStandard::Func3 *f)
Definition ExprFunc.h:93
ExprFuncStandard _standardFunc
Definition ExprFunc.h:183
ExprFunc(ExprFuncStandard::Func1 *f)
Definition ExprFunc.h:81
int minArgs() const
return the minimum number of acceptable arguments
Definition ExprFunc.h:167
ExprFunc(ExprFuncStandard::Func1vv *f)
Definition ExprFunc.h:141
ExprFunc(ExprFuncStandard::Func6 *f)
Definition ExprFunc.h:111
ExprFunc(ExprFuncStandard::Func2vv *f)
Definition ExprFunc.h:147
ExprFunc(ExprFuncStandard::Funcn *f, int minArgs, int maxArgs)
Definition ExprFunc.h:117
static void cleanup()
cleanup all functions
Definition ExprFunc.cpp:110
ExprFunc(ExprFuncStandard::Func1v *f)
Definition ExprFunc.h:123
static std::string getDocString(const char *functionName)
Get doc string for a specific function.
Definition ExprFunc.cpp:174
ExprFunc(ExprFuncStandard::Funcnvv *f, int minArgs, int maxArgs)
Definition ExprFunc.h:159
ExprFunc(ExprFuncStandard::Func2v *f)
Definition ExprFunc.h:129
static Statistics statistics()
Dump statistics.
Definition ExprFunc.cpp:191
ExprFunc(ExprFuncStandard::Func2 *f)
Definition ExprFunc.h:87
ExprFuncX * _func
Definition ExprFunc.h:184
double max(double x, double y)
double min(double x, double y)
std::map< std::string, double > Statistics
Definition ExprFuncX.h:16