HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
formula_map_literal_node.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_node.hpp"
8#include "../macros.hpp"
9
10hi_export_module(hikogui.formula.formula_map_literal_node);
11
12namespace hi { inline namespace v1 {
13
15 formula_vector keys;
16 formula_vector values;
17
18 formula_map_literal_node(size_t line_nr, size_t column_nr, formula_vector keys, formula_vector values) :
19 formula_node(line_nr, column_nr), keys(std::move(keys)), values(std::move(values))
20 {
21 }
22
24 {
25 for (auto &key : keys) {
26 key->post_process(context);
27 }
28
29 for (auto &value : values) {
30 value->post_process(context);
31 }
32 }
33
35 {
36 hi_assert(keys.size() == values.size());
37
39 for (std::size_t i = 0; i < keys.size(); i++) {
40 hilet &key = keys[i];
41 hilet &value = values[i];
42
43 r[key->evaluate(context)] = value->evaluate(context);
44 }
45 return datum{std::move(r)};
46 }
47
48 std::string string() const noexcept override
49 {
50 hi_assert(keys.size() == values.size());
51
52 std::string r = "{";
53 for (std::size_t i = 0; i < keys.size(); i++) {
54 hilet &key = keys[i];
55 hilet &value = values[i];
56
57 if (i > 0) {
58 r += ", ";
59 }
60 r += key->string();
61 r += ": ";
62 r += value->string();
63 }
64 return r + "}";
65 }
66};
67
68}} // namespace hi::inline v1
DOXYGEN BUG.
Definition algorithm.hpp:16
geometry/margins.hpp
Definition lookahead_iterator.hpp:5
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:377
A dynamic data type.
Definition datum.hpp:212
Definition formula_evaluation_context.hpp:18
Definition formula_map_literal_node.hpp:14
void post_process(formula_post_process_context &context) override
Resolve function and method pointers.
Definition formula_map_literal_node.hpp:23
datum evaluate(formula_evaluation_context &context) const override
Evaluate an rvalue.
Definition formula_map_literal_node.hpp:34
Definition formula_node.hpp:21
Definition formula_post_process_context.hpp:237
T move(T... args)
T size(T... args)