54 typedef typename compositor_t::function function_t;
61 symbol_table_t symbol_table;
63 symbol_table.add_constants();
65 symbol_table.add_variable(
"v1" , v1 );
66 symbol_table.add_variable(
"v2" , v2 );
67 symbol_table.add_function(
"func0", f0 );
68 symbol_table.add_function(
"func1", func1<double>);
70 compositor_t compositor(symbol_table);
75 .expression(
" 1 + cos(v1 * v2) / 3;"));
77 const std::string program0 =
"func0(v1,v2);";
78 const std::string program1 =
"func1(v1,v2);";
79 const std::string program2 =
"func2(v1,v2);";
81 expression_t expression0(symbol_table);
82 expression_t expression1(symbol_table);
83 expression_t expression2(symbol_table);
87 if (!parser.compile(program0,expression0))
89 printf(
"Error: %s\tExpression: %s\n",
90 parser.error().c_str(),
96 if (!parser.compile(program1,expression1))
98 printf(
"Error: %s\tExpression: %s\n",
99 parser.error().c_str(),
105 if (!parser.compile(program2,expression2))
107 printf(
"Error: %s\tExpression: %s\n",
108 parser.error().c_str(),
114 const std::size_t
rounds = 100000000;
122 for (std::size_t r = 0; r <
rounds; ++r)
124 total += expression0.value();
130 printf(
"[custom function] Total time: %8.3fsec\tRate: %15.3f\tTotal:%20.5f\n",
142 for (std::size_t r = 0; r <
rounds; ++r)
144 total += expression1.value();
150 printf(
"[free function ] Total time: %8.3fsec\tRate: %15.3f\tTotal:%20.5f\n",
162 for (std::size_t r = 0; r <
rounds; ++r)
164 total += expression2.value();
170 printf(
"[compositor ] Total time: %8.3fsec\tRate: %15.3f\tTotal:%20.5f\n",
182 for (std::size_t r = 0; r <
rounds; ++r)
184 total += func1<T>(v1,v2);
190 printf(
"[native ] Total time: %8.3fsec\tRate: %15.3f\tTotal:%20.5f\n",