HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
formula_post_process_context.hpp
1// Copyright Take Vos 2020-2021.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "formula_evaluation_context.hpp"
8#include "../utility/module.hpp"
9#include "../datum.hpp"
10#include "../strings.hpp"
11#include <functional>
12#include <unordered_map>
13#include <vector>
14#include <string>
15#include <string_view>
16
17namespace hi::inline v1 {
18
20 using filter_type = std::function<std::string(std::string_view)>;
27
28 function_table functions;
29 function_stack super_stack;
30 static function_table global_functions;
31 static method_table global_methods;
32 static filter_table global_filters;
33
34 [[nodiscard]] function_type get_function(std::string const &name) const noexcept
35 {
36 if (name == "super") {
37 if (super_stack.size() > 0) {
38 return super_stack.back();
39 } else {
40 return {};
41 }
42 }
43
44 hilet i = functions.find(name);
45 if (i != functions.end()) {
46 return i->second;
47 }
48
49 hilet j = global_functions.find(name);
50 if (j != global_functions.end()) {
51 return j->second;
52 }
53
54 return {};
55 }
56
57 [[nodiscard]] function_type set_function(std::string const &name, function_type func) noexcept
58 {
59 using std::swap;
60
61 swap(functions[name], func);
62 return func;
63 }
64
65 void push_super(function_type func) noexcept
66 {
67 super_stack.push_back(func);
68 }
69
70 void pop_super(void) noexcept
71 {
72 super_stack.pop_back();
73 }
74
75 [[nodiscard]] filter_type get_filter(std::string const &name) const noexcept
76 {
77 hilet i = global_filters.find(name);
78 if (i != global_filters.end()) {
79 return i->second;
80 }
81
82 return {};
83 }
84
85 [[nodiscard]] method_type get_method(std::string const &name) const noexcept
86 {
87 hilet i = global_methods.find(name);
88 if (i != global_methods.end()) {
89 return i->second;
90 }
91
92 return {};
93 }
94};
95
96} // namespace hi::inline v1
#define hilet
Invariant should be the default for variables.
Definition utility.hpp:23
DOXYGEN BUG.
Definition algorithm.hpp:13
A dynamic data type.
Definition datum.hpp:223
Definition formula_evaluation_context.hpp:15
Definition formula_post_process_context.hpp:19
T back(T... args)
T end(T... args)
T find(T... args)
T pop_back(T... args)
T push_back(T... args)
T size(T... args)
T swap(T... args)