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
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)
double min(double x, double y)
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