MUDA
Loading...
Searching...
No Matches
field_builder.h
1#pragma once
2#include <memory>
3#include <string>
4#include <muda/ext/field/field_entry_type.h>
5#include <muda/ext/field/field_entry_layout.h>
6
7namespace muda
8{
9class SubField;
10template <typename T, FieldEntryLayout Layout, int M, int N>
11class FieldEntry;
12
13template <FieldEntryLayout Layout>
15{
16 public:
18 {
19 FieldBuilder<Layout>& m_builder;
20
21 std::string m_name;
22
23 public:
24 EntryProxy(FieldBuilder<Layout>& builder, std::string_view name)
25 : m_builder(builder)
26 , m_name(name)
27 {
28 }
29 template <typename T>
30 FieldEntry<T, Layout, 1, 1>& scalar() &&;
31
32 template <typename T, int N>
33 FieldEntry<T, Layout, N, 1>& vector() &&;
34
35 template <typename T>
36 FieldEntry<T, Layout, 2, 1>& vector2() &&;
37 template <typename T>
38 FieldEntry<T, Layout, 3, 1>& vector3() &&;
39 template <typename T>
40 FieldEntry<T, Layout, 4, 1>& vector4() &&;
41
42 template <typename T, int M, int N>
43 FieldEntry<T, Layout, M, N>& matrix() &&;
44
45 template <typename T>
46 FieldEntry<T, Layout, 2, 2>& matrix2x2() &&;
47 template <typename T>
48 FieldEntry<T, Layout, 3, 3>& matrix3x3() &&;
49 template <typename T>
50 FieldEntry<T, Layout, 4, 4>& matrix4x4() &&;
51 };
52
53 private:
54 friend class SubField;
55
56 SubField& m_subfield;
57 FieldEntryLayoutInfo m_layout;
58 FieldBuildOptions m_options;
59 bool m_single_entry = false;
60 bool m_is_built = false;
61
62 FieldBuilder(SubField& subfield, FieldEntryLayoutInfo layout, const FieldBuildOptions& options)
63 : m_subfield(subfield)
64 , m_layout(layout)
65 , m_options(options)
66 {
67 MUDA_ASSERT(Layout == FieldEntryLayout::RuntimeLayout || layout.layout() == Layout,
68 "Layout mismatching");
69 }
70
71 template <typename T, int M, int N>
72 FieldEntry<T, Layout, M, N>& create_entry(std::string_view name, FieldEntryType type);
73
74 public:
75 EntryProxy entry(std::string_view name);
76 EntryProxy entry();
81 void build();
82
84};
85} // namespace muda
86
87#include "details/field_builder.inl"
Definition field_build_options.inl:6
Definition field_builder.h:18
Definition field_builder.h:15
void build()
Finish building the field.
Definition field_builder.inl:104
Definition field_entry.h:76
Definition field_entry_layout.h:24
Definition sub_field.h:18