SeExpr
ExprFunc.h
Go to the documentation of this file.
1/*
2 Copyright Disney Enterprises, Inc. All rights reserved.
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License
6 and the following modification to it: Section 6 Trademarks.
7 deleted and replaced with:
8
9 6. Trademarks. This License does not grant permission to use the
10 trade names, trademarks, service marks, or product names of the
11 Licensor and its affiliates, except as required for reproducing
12 the content of the NOTICE file.
13
14 You may obtain a copy of the License at
15 http://www.apache.org/licenses/LICENSE-2.0
16*/
17#ifndef ExprFunc_h
18#define ExprFunc_h
19
20#include "Vec.h"
21#include <vector>
22
23#include "ExprType.h"
24#include "ExprEnv.h"
25#include "ExprFuncX.h"
26#include "ExprFuncStandard.h"
27
28namespace SeExpr2 {
29
31
44class ExprFunc {
45 static void initInternal(); // call to define built-in funcs and load standard plugins
46 public:
48
50 static void init();
52 static void cleanup();
54 static void loadPlugins(const char* path);
56 static void loadPlugin(const char* path);
57
58 /* A pointer to the define func is passed to the init method of
59 expression plugins. This should be called instead of calling
60 the static method directly so that the plugin will work if the
61 expression library is statically linked. */
62 static void define(const char* name, ExprFunc f, const char* docString);
63 static void define(const char* name, ExprFunc f);
64 typedef void (*Define)(const char* name, ExprFunc f);
65 typedef void (*Define3)(const char* name, ExprFunc f, const char* docString);
66
68 static const ExprFunc* lookup(const std::string& name);
69
71 static void getFunctionNames(std::vector<std::string>& names);
72
74 static std::string getDocString(const char* functionName);
75
77 static size_t sizeInBytes();
78
80 static Statistics statistics();
81
82 // bool isScalar() const { return _scalar; };
83
84 ExprFunc() : _func(0), _minargs(0), _maxargs(0) {};
85
87 ExprFunc(ExprFuncX& f, int min = 1, int max = 1) : _func(&f), _minargs(min), _maxargs(max) {};
88
90 : _standardFunc(ExprFuncStandard::FUNC0, (void*)f), _func(0), _minargs(0), _maxargs(0) {}
92 : _standardFunc(ExprFuncStandard::FUNC1, (void*)f), _func(0), _minargs(1), _maxargs(1) {}
94 : _standardFunc(ExprFuncStandard::FUNC2, (void*)f), _func(0), _minargs(2), _maxargs(2) {}
96 : _standardFunc(ExprFuncStandard::FUNC3, (void*)f), _func(0), _minargs(3), _maxargs(3) {}
98 : _standardFunc(ExprFuncStandard::FUNC4, (void*)f), _func(0), _minargs(4), _maxargs(4) {}
100 : _standardFunc(ExprFuncStandard::FUNC5, (void*)f), _func(0), _minargs(5), _maxargs(5) {}
102 : _standardFunc(ExprFuncStandard::FUNC6, (void*)f), _func(0), _minargs(6), _maxargs(6) {}
106 : _standardFunc(ExprFuncStandard::FUNC1V, (void*)f), _func(0), _minargs(1), _maxargs(1) {}
108 : _standardFunc(ExprFuncStandard::FUNC2V, (void*)f), _func(0), _minargs(2), _maxargs(2) {}
112 : _standardFunc(ExprFuncStandard::FUNC1VV, (void*)f), _func(0), _minargs(1), _maxargs(1) {}
114 : _standardFunc(ExprFuncStandard::FUNC2VV, (void*)f), _func(0), _minargs(2), _maxargs(2) {}
116 : _standardFunc(ExprFuncStandard::FUNC1VV, (void*)f), _func(0), _minargs(1), _maxargs(1) {}
119
121 int minArgs() const { return _minargs; }
123 int maxArgs() const { return _maxargs; }
125 const ExprFuncX* funcx() const { return _func ? _func : &_standardFunc; }
126
127 private:
132 static std::vector<void*> dynlib;
133};
134}
135
136#endif
double Func5(double, double, double, double, double)
double Func1v(const Vec3d &)
Vec3d Func1vv(const Vec3d &)
double Func2v(const Vec3d &, const Vec3d &)
double Funcn(int n, double *params)
double Func6(double, double, double, double, double, double)
double Func2(double, double)
double Func3(double, double, double)
double Funcnv(int n, const Vec3d *params)
Vec3d Funcnvv(int n, const Vec3d *params)
Vec3d Func2vv(const Vec3d &, const Vec3d &)
double Func4(double, double, double, double)
Extension function spec, used for complicated argument custom functions.
Definition: ExprFuncX.h:35
Function Definition, used in parse tree and func table.
Definition: ExprFunc.h:44
static std::string getDocString(const char *functionName)
Get doc string for a specific function.
Definition: ExprFunc.cpp:183
static void initInternal()
Definition: ExprFunc.cpp:150
ExprFunc(ExprFuncStandard::Funcnvv *f)
Definition: ExprFunc.h:115
ExprFunc(ExprFuncStandard::Func5 *f)
Definition: ExprFunc.h:99
ExprFunc(ExprFuncStandard::Func4 *f)
Definition: ExprFunc.h:97
ExprFunc(ExprFuncStandard::Func0 *f)
Definition: ExprFunc.h:89
void(* Define)(const char *name, ExprFunc f)
Definition: ExprFunc.h:64
ExprFunc(ExprFuncStandard::Func2vv *f)
Definition: ExprFunc.h:113
static void init()
call to define built-in funcs and load standard plugins
Definition: ExprFunc.cpp:112
ExprFunc(ExprFuncStandard::Funcnvv *f, int minArgs, int maxArgs)
Definition: ExprFunc.h:117
ExprFunc(ExprFuncStandard::Funcn *f, int minArgs, int maxArgs)
Definition: ExprFunc.h:103
ExprFunc(ExprFuncX &f, int min=1, int max=1)
User defined function with custom argument parsing.
Definition: ExprFunc.h:87
ExprFunc(ExprFuncStandard::Funcnv *f, int minArgs, int maxArgs)
Definition: ExprFunc.h:109
static void loadPlugins(const char *path)
load all plugins in a given path
Definition: ExprFunc.cpp:217
ExprFunc(ExprFuncStandard::Func1vv *f)
Definition: ExprFunc.h:111
void(* Define3)(const char *name, ExprFunc f, const char *docString)
Definition: ExprFunc.h:65
int maxArgs() const
return the maximum number of acceptable arguments
Definition: ExprFunc.h:123
ExprFunc(ExprFuncStandard::Func3 *f)
Definition: ExprFunc.h:95
ExprFuncX * _func
Definition: ExprFunc.h:129
static void loadPlugin(const char *path)
load a given plugin
Definition: ExprFunc.cpp:252
const ExprFuncX * funcx() const
return pointer to the funcx
Definition: ExprFunc.h:125
static void cleanup()
cleanup all functions
Definition: ExprFunc.cpp:117
ExprFunc(ExprFuncStandard::Func6 *f)
Definition: ExprFunc.h:101
ExprFunc(ExprFuncStandard::Func1 *f)
Definition: ExprFunc.h:91
ExprFuncStandard _standardFunc
Definition: ExprFunc.h:128
static void define(const char *name, ExprFunc f, const char *docString)
Definition: ExprFunc.cpp:169
ExprFunc(ExprFuncStandard::Func1v *f)
Definition: ExprFunc.h:105
static const ExprFunc * lookup(const std::string &name)
Lookup a builtin function by name.
Definition: ExprFunc.cpp:130
static Statistics statistics()
Dump statistics.
Definition: ExprFunc.cpp:197
static size_t sizeInBytes()
Get the total size estimate of all plugins.
Definition: ExprFunc.cpp:191
ExprFunc(ExprFuncStandard::Func2v *f)
Definition: ExprFunc.h:107
int minArgs() const
return the minimum number of acceptable arguments
Definition: ExprFunc.h:121
static void getFunctionNames(std::vector< std::string > &names)
Get a list of registered builtin and DSO generated functions.
Definition: ExprFunc.cpp:176
ExprFunc(ExprFuncStandard::Func2 *f)
Definition: ExprFunc.h:93
static std::vector< void * > dynlib
Definition: ExprFunc.h:132
std::map< std::string, double > Statistics
Definition: ExprFuncX.h:28
double max(double x, double y)
Definition: ExprBuiltins.h:42
double min(double x, double y)
Definition: ExprBuiltins.h:43
with numParticles numAttributes A variable block contains variable names and types but doesn t care what the values are< pre > void f(const std::string &s, MyParticleData *p, int outputDim=3)
Definition: varblocks.txt:35