C++ Mathematical Expression Toolkit (ExprTk) release
Loading...
Searching...
No Matches
exprtk_import_packages.cpp
Go to the documentation of this file.
1/*
2 **************************************************************
3 * C++ Mathematical Expression Toolkit Library *
4 * *
5 * ExprTk Import Packages Examples *
6 * Author: Arash Partow (1999-2024) *
7 * URL: https://www.partow.net/programming/exprtk/index.html *
8 * *
9 * Copyright notice: *
10 * Free use of the Mathematical Expression Toolkit Library is *
11 * permitted under the guidelines and in accordance with the *
12 * most current version of the MIT License. *
13 * https://www.opensource.org/licenses/MIT *
14 * SPDX-License-Identifier: MIT *
15 * *
16 **************************************************************
17*/
18
19
20#include <cstdio>
21#include <map>
22#include <string>
23
24#include "exprtk.hpp"
25
26
27template <typename T>
29{
30public:
31
38 typedef std::map<std::string,std::function<bool(symbol_table_t& symbol_table)>> package_map_t;
39
40 using igfun_t::operator();
41
43 : igfun_t("S")
44 , symbol_table_(symbol_table)
45 {
47
48 package_map_.emplace("exprtk.rtl.io" ,
49 [&](symbol_table_t& symbtab) -> bool { return symbtab.add_package(io_package ); });
50
51 package_map_.emplace("exprtk.rtl.io.file",
52 [&](symbol_table_t& symbtab) -> bool { return symbtab.add_package(file_package ); });
53
54 package_map_.emplace("exprtk.rtl.vecops" ,
55 [&](symbol_table_t& symbtab) -> bool { return symbtab.add_package(vector_package); });
56 }
57
58 inline T operator()(parameter_list_t parameters)
59 {
60 string_t package(parameters[0]);
61
62 typename package_map_t::iterator itr = package_map_.find(exprtk::to_str(package));
63
64 if (package_map_.end() == itr)
65 {
66 return T(0);
67 }
68
69 return itr->second(symbol_table_) ? T(1) : T(0);
70 }
71
72private:
73
79};
80
81template <typename T>
83{
84 typedef exprtk::symbol_table<T> symbol_table_t;
85 typedef exprtk::expression<T> expression_t;
86 typedef exprtk::parser<T> parser_t;
87
88 symbol_table_t symbol_table;
89
90 import_packages<T> import_package(symbol_table);
91
92 symbol_table.add_function("import",import_package);
93
94 expression_t expression;
95 expression.register_symbol_table(symbol_table);
96
97 parser_t parser;
98
99 const std::string import_packages_program =
100 " import('exprtk.rtl.io' ); "
101 " import('exprtk.rtl.io.file'); "
102 " import('exprtk.rtl.vecops' ); "
103 " "
104 " var v[7] := [1:1]; "
105 " "
106 " println('v: ', v); "
107 " "
108 " reverse(v); "
109 " "
110 " println('reversed v: ', v); "
111 " ";
112
113 parser.compile(import_packages_program, expression);
114
115 expression.value();
116}
117
118int main()
119{
120 import_package_example<double>();
121 return 0;
122}
bool add_package(Package &package)
Definition exprtk.hpp:21098
generic_type::scalar_view scalar_t
symbol_table_t & symbol_table_
exprtk::rtl::io::file::package< T > file_package
import_packages(symbol_table_t &symbol_table)
std::map< std::string, std::function< bool(symbol_table_t &symbol_table)> > package_map_t
igfun_t::parameter_list_t parameter_list_t
exprtk::igeneric_function< T > igfun_t
exprtk::rtl::vecops::package< T > vector_package
generic_type::string_view string_t
igfun_t::generic_type generic_type
exprtk::symbol_table< T > symbol_table_t
T operator()(parameter_list_t parameters)
exprtk::rtl::io::package< T > io_package
void import_package_example()
std::string to_str(const StringView &view)
Definition exprtk.hpp:4869