23 void define(
const char *name,
const KSeExpr::ExprFunc &f,
const char *docString =
nullptr)
26 funcmap[name] = FuncMapItem(std::string(docString), f);
28 funcmap[name] = FuncMapItem(name, f);
33 const auto &i = funcmap.find(name);
34 if (i == funcmap.end())
37 return &i->second.second;
40 void getFunctionNames(std::vector<std::string> &names)
42 for (
const auto &i : funcmap)
43 names.push_back(i.first);
46 std::string getDocString(
const char *functionName)
48 const auto &i = funcmap.find(functionName);
49 if (i == funcmap.end())
52 return i->second.first;
55 size_t sizeInBytes()
const
58 for (
const auto &it : funcmap) {
59 totalSize += it.first.size() +
sizeof(FuncMapItem);
72 for (
const auto &it : funcmap) {
73 totalSize += it.first.size() +
sizeof(FuncMapItem);
79 return statisticsDump;
83 using FuncMapItem = std::pair<std::string, KSeExpr::ExprFunc>;
84 using FuncMap = std::map<std::string, FuncMapItem>;
88 std::unique_ptr<FuncTable> Functions;
106 std::lock_guard<std::mutex> locker(
mutex);
112 std::lock_guard<std::mutex> locker(
mutex);
118 std::lock_guard<std::mutex> locker(
mutex);
129 Functions->define(name, f);
136 Functions->define(name, f, docString);
146 Functions = std::make_unique<FuncTable>();
152 std::lock_guard<std::mutex> locker(
mutex);
160 std::lock_guard<std::mutex> locker(
mutex);
168 std::lock_guard<std::mutex> locker(
mutex);
171 Functions->getFunctionNames(names);
176 std::lock_guard<std::mutex> locker(
mutex);
179 std::string ret = Functions->getDocString(functionName);
185 std::lock_guard<std::mutex> locker(
mutex);
188 return Functions->sizeInBytes();
193 std::lock_guard<std::mutex> locker(
mutex);
196 return Functions->statistics();
Extension function spec, used for complicated argument custom functions.
Function Definition, used in parse tree and func table.
static void getFunctionNames(std::vector< std::string > &names)
Get a list of registered builtin and DSO generated functions.
static void define(const char *name, const ExprFunc &f, const char *docString)
static size_t sizeInBytes()
Get the total size estimate of all plugins.
static void init()
call to define built-in funcs
static const ExprFunc * lookup(const std::string &name)
Lookup a builtin function by name.
static void initInternal()
static void cleanup()
cleanup all functions
static std::string getDocString(const char *functionName)
Get doc string for a specific function.
static Statistics statistics()
Dump statistics.
static void defineInternal(const char *name, const ExprFunc &f)
std::map< std::string, double > Statistics
void defineBuiltins(ExprFunc::Define, ExprFunc::Define3 define3)
static void defineInternal3(const char *name, const ExprFunc &f, const char *docString)