Blender V4.3
NOD_value_elem_eval.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include "NOD_value_elem.hh"
8
9#include "BLI_map.hh"
10
12
18 private:
19 const Map<const bNodeSocket *, ElemVariant> &elem_by_socket_;
20 Vector<SocketElem> &output_elems_;
21
22 public:
23 const bNode &node;
24
25 ElemEvalParams(const bNode &node,
26 const Map<const bNodeSocket *, ElemVariant> &elem_by_socket,
27 Vector<SocketElem> &output_elems);
28
29 template<typename T> T get_input_elem(const StringRef identifier) const
30 {
31 const bNodeSocket &socket = node.input_by_identifier(identifier);
32 if (const ElemVariant *elem = this->elem_by_socket_.lookup_ptr(&socket)) {
33 return std::get<T>(elem->elem);
34 }
35 return T();
36 }
37
38 template<typename T> void set_output_elem(const StringRef identifier, T elem)
39 {
40 const bNodeSocket &socket = node.output_by_identifier(identifier);
41 output_elems_.append({&socket, ElemVariant{elem}});
42 }
43};
44
50 private:
51 const Map<const bNodeSocket *, ElemVariant> &elem_by_socket_;
52 Vector<SocketElem> &input_elems_;
53
54 public:
55 const bNode &node;
56
57 InverseElemEvalParams(const bNode &node,
58 const Map<const bNodeSocket *, ElemVariant> &elem_by_socket,
59 Vector<SocketElem> &input_elems);
60
61 template<typename T> T get_output_elem(const StringRef identifier) const
62 {
63 const bNodeSocket &socket = node.output_by_identifier(identifier);
64 if (const ElemVariant *elem = this->elem_by_socket_.lookup_ptr(&socket)) {
65 return std::get<T>(elem->elem);
66 }
67 return T();
68 }
69
70 template<typename T> void set_input_elem(const StringRef identifier, T elem)
71 {
72 const bNodeSocket &socket = node.input_by_identifier(identifier);
73 input_elems_.append({&socket, ElemVariant{elem}});
74 }
75};
76
77} // namespace blender::nodes::value_elem
const Value * lookup_ptr(const Key &key) const
Definition BLI_map.hh:484
void append(const T &value)
ElemEvalParams(const bNode &node, const Map< const bNodeSocket *, ElemVariant > &elem_by_socket, Vector< SocketElem > &output_elems)
Definition value_elem.cc:85
void set_output_elem(const StringRef identifier, T elem)
T get_input_elem(const StringRef identifier) const
T get_output_elem(const StringRef identifier) const
InverseElemEvalParams(const bNode &node, const Map< const bNodeSocket *, ElemVariant > &elem_by_socket, Vector< SocketElem > &input_elems)
Definition value_elem.cc:92
void set_input_elem(const StringRef identifier, T elem)
#define T