C++ Mathematical Expression Toolkit (ExprTk)
release
Toggle main menu visibility
Loading...
Searching...
No Matches
exprtk
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-2025) *
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
27
template
<
typename
T>
28
class
import_packages
:
public
exprtk::igeneric_function
<T>
29
{
30
public
:
31
32
typedef
typename
exprtk::igeneric_function<T>
igfun_t
;
33
typedef
typename
igfun_t::parameter_list_t
parameter_list_t
;
34
typedef
typename
igfun_t::generic_type
generic_type
;
35
typedef
typename
generic_type::scalar_view
scalar_t
;
36
typedef
typename
generic_type::string_view
string_t
;
37
typedef
exprtk::symbol_table<T>
symbol_table_t
;
38
typedef
std::function<bool(
symbol_table_t
&)>
import_func_t
;
39
typedef
std::map<std::string,import_func_t>
package_map_t
;
40
41
using
igfun_t::operator();
42
43
import_packages
(
symbol_table_t
& symbol_table)
44
:
igfun_t
(
"S"
)
45
,
symbol_table_
(symbol_table)
46
{
47
igfun_t::has_side_effects
() =
false
;
48
49
package_map_
.emplace(
50
"exprtk.rtl.io"
,
51
[&](
symbol_table_t
& symbtab) ->
bool
{
return
symbtab.
add_package
(
io_package
); });
52
53
package_map_
.emplace(
54
"exprtk.rtl.io.file"
,
55
[&](
symbol_table_t
& symbtab) ->
bool
{
return
symbtab.
add_package
(
file_package
); });
56
57
package_map_
.emplace(
58
"exprtk.rtl.vecops"
,
59
[&](
symbol_table_t
& symbtab) ->
bool
{
return
symbtab.
add_package
(
vector_package
); });
60
}
61
62
inline
T
operator()
(
parameter_list_t
parameters)
override
63
{
64
const
string_t
package(parameters[0]);
65
66
const
auto
itr =
package_map_
.find(
exprtk::to_str
(package));
67
68
if
(
package_map_
.end() == itr)
69
{
70
return
T(0);
71
}
72
73
return
itr->second(
symbol_table_
) ? T(1) : T(0);
74
}
75
76
private
:
77
78
symbol_table_t
&
symbol_table_
;
79
package_map_t
package_map_
;
80
exprtk::rtl::io::package<T>
io_package
;
81
exprtk::rtl::io::file::package<T>
file_package
;
82
exprtk::rtl::vecops::package<T>
vector_package
;
83
};
84
85
template
<
typename
T>
86
void
import_package_example
()
87
{
88
typedef
exprtk::symbol_table<T>
symbol_table_t;
89
typedef
exprtk::expression<T>
expression_t;
90
typedef
exprtk::parser<T>
parser_t;
91
92
symbol_table_t symbol_table;
93
94
import_packages<T>
import_package(symbol_table);
95
96
symbol_table.add_function(
"import"
,import_package);
97
98
expression_t expression;
99
expression.register_symbol_table(symbol_table);
100
101
parser_t parser;
102
103
const
std::string import_packages_program =
104
" import('exprtk.rtl.io' ); "
105
" import('exprtk.rtl.io.file'); "
106
" import('exprtk.rtl.vecops' ); "
107
" "
108
" var v[7] := [1:1]; "
109
" "
110
" println('v: ', v); "
111
" "
112
" reverse(v); "
113
" "
114
" println('reversed v: ', v); "
115
" "
;
116
117
parser.compile(import_packages_program, expression);
118
119
expression.value();
120
}
121
122
int
main
()
123
{
124
import_package_example<double>
();
125
return
0;
126
}
exprtk::expression
Definition
exprtk.hpp:21832
exprtk::function_traits::has_side_effects
bool & has_side_effects()
Definition
exprtk.hpp:19792
exprtk::igeneric_function
Definition
exprtk.hpp:19972
exprtk::igeneric_function::parameter_list_t
generic_type::parameter_list parameter_list_t
Definition
exprtk.hpp:19984
exprtk::igeneric_function::generic_type
type_store< T > generic_type
Definition
exprtk.hpp:19983
exprtk::parser
Definition
exprtk.hpp:22525
exprtk::symbol_table
Definition
exprtk.hpp:20090
exprtk::symbol_table::add_package
bool add_package(Package &package)
Definition
exprtk.hpp:21443
import_packages
Definition
exprtk_import_packages.cpp:29
import_packages::package_map_
package_map_t package_map_
Definition
exprtk_import_packages.cpp:79
import_packages::scalar_t
generic_type::scalar_view scalar_t
Definition
exprtk_import_packages.cpp:35
import_packages::symbol_table_
symbol_table_t & symbol_table_
Definition
exprtk_import_packages.cpp:78
import_packages::operator()
T operator()(parameter_list_t parameters) override
Definition
exprtk_import_packages.cpp:62
import_packages::file_package
exprtk::rtl::io::file::package< T > file_package
Definition
exprtk_import_packages.cpp:81
import_packages::package_map_t
std::map< std::string, import_func_t > package_map_t
Definition
exprtk_import_packages.cpp:39
import_packages::import_func_t
std::function< bool(symbol_table_t &)> import_func_t
Definition
exprtk_import_packages.cpp:38
import_packages::import_packages
import_packages(symbol_table_t &symbol_table)
Definition
exprtk_import_packages.cpp:43
import_packages::parameter_list_t
igfun_t::parameter_list_t parameter_list_t
Definition
exprtk_import_packages.cpp:33
import_packages::igfun_t
exprtk::igeneric_function< T > igfun_t
Definition
exprtk_import_packages.cpp:32
import_packages::vector_package
exprtk::rtl::vecops::package< T > vector_package
Definition
exprtk_import_packages.cpp:82
import_packages::string_t
generic_type::string_view string_t
Definition
exprtk_import_packages.cpp:36
import_packages::generic_type
igfun_t::generic_type generic_type
Definition
exprtk_import_packages.cpp:34
import_packages::symbol_table_t
exprtk::symbol_table< T > symbol_table_t
Definition
exprtk_import_packages.cpp:37
import_packages::io_package
exprtk::rtl::io::package< T > io_package
Definition
exprtk_import_packages.cpp:80
exprtk.hpp
import_package_example
void import_package_example()
Definition
exprtk_import_packages.cpp:86
main
int main()
Definition
exprtk_import_packages.cpp:122
exprtk::to_str
std::string to_str(const StringView &view)
Definition
exprtk.hpp:5017
exprtk::rtl::io::file::package
Definition
exprtk.hpp:44788
exprtk::rtl::io::package
Definition
exprtk.hpp:44296
exprtk::rtl::vecops::package
Definition
exprtk.hpp:46626
exprtk::type_store::scalar_view
Definition
exprtk.hpp:4956
exprtk::type_store::string_view
type_view< char > string_view
Definition
exprtk.hpp:4953
Generated by
1.17.0