KSeExpr  4.0.4.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 
18 namespace KSeExpr
19 {
21 
34 class ExprFunc
35 {
36  static void initInternal(); // call to define built-in funcs
37 public:
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 
78  : _standardFunc(ExprFuncStandard::FUNC0, (void *)f)
79  {
80  }
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  }
118  : _standardFunc(ExprFuncStandard::FUNCN, (void *)f)
119  , _minargs(minArgs)
120  , _maxargs(maxArgs)
121  {
122  }
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  }
136  : _standardFunc(ExprFuncStandard::FUNCNV, (void *)f)
137  , _minargs(minArgs)
138  , _maxargs(maxArgs)
139  {
140  }
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  }
160  : _standardFunc(ExprFuncStandard::FUNCNVV, (void *)f)
161  , _minargs(minArgs)
162  , _maxargs(maxArgs)
163  {
164  }
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 
182 private:
184  ExprFuncX *_func {nullptr};
185  int _minargs {0};
186  int _maxargs {0};
187 };
188 } // namespace KSeExpr
189 
190 #endif
double(double, double, double, double) Func4
Vec3d(int, const Vec3d *) Funcnvv
double(int, double *) Funcn
double(const Vec3d &) Func1v
double(const Vec3d &, const Vec3d &) Func2v
double(double, double, double, double, double, double) Func6
double(double, double, double) Func3
Vec3d(const Vec3d &) Func1vv
double(int, const Vec3d *) Funcnv
double(double, double, double, double, double) Func5
Vec3d(const Vec3d &, const Vec3d &) Func2vv
double(double, double) Func2
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
void(*)(const char *, const ExprFunc &, const char *) Define3
Definition: ExprFunc.h:50
static void getFunctionNames(std::vector< std::string > &names)
Get a list of registered builtin and DSO generated functions.
Definition: ExprFunc.cpp:166
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
void(*)(const char *, const ExprFunc &) Define
Definition: ExprFunc.h:49
ExprFunc(ExprFuncStandard::Func3 *f)
Definition: ExprFunc.h:93
ExprFuncStandard _standardFunc
Definition: ExprFunc.h:183
ExprFunc(ExprFuncStandard::Func1 *f)
Definition: ExprFunc.h:81
const ExprFuncX * funcx() const
return pointer to the funcx
Definition: ExprFunc.h:177
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)
Definition: ExprBuiltins.h:74
double min(double x, double y)
Definition: ExprBuiltins.h:78
std::map< std::string, double > Statistics
Definition: ExprFuncX.h:16