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
7
namespace
muda
8
{
9
class
SubField;
10
template
<
typename
T, FieldEntryLayout Layout,
int
M,
int
N>
11
class
FieldEntry;
12
13
template
<FieldEntryLayout Layout>
14
class
FieldBuilder
15
{
16
public
:
17
class
EntryProxy
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
83
~FieldBuilder
();
84
};
85
}
// namespace muda
86
87
#include "details/field_builder.inl"
muda::FieldBuildOptions
Definition
field_build_options.inl:6
muda::FieldBuilder::EntryProxy
Definition
field_builder.h:18
muda::FieldBuilder
Definition
field_builder.h:15
muda::FieldBuilder::build
void build()
Finish building the field.
Definition
field_builder.inl:104
muda::FieldEntry
Definition
field_entry.h:76
muda::FieldEntryLayoutInfo
Definition
field_entry_layout.h:24
muda::SubField
Definition
sub_field.h:18
src
muda
ext
field
field_builder.h
Generated by
1.9.8