MUDA
Loading...
Searching...
No Matches
sub_field.h
1#pragma once
2#include <memory>
3#include <muda/tools/host_device_string_cache.h>
4#include <muda/ext/field/field_build_options.h>
6#include <muda/ext/field/field_entry_type.h>
7#include <muda/ext/field/field_builder.h>
8
9namespace muda
10{
11class Field;
12class FieldEntryBase;
13template <typename T, FieldEntryLayout Layout, int M, int N>
14class FieldEntry;
15class SubFieldInterface;
16
18{
19 template <typename T>
20 using U = std::unique_ptr<T>;
21
22 Field& m_field;
23 std::string m_name;
24 U<SubFieldInterface> m_interface;
25 bool m_is_built = false;
26
27 std::byte* data_buffer() const;
28 size_t num_entries() const;
29
30 FieldEntryBase* find_entry(std::string_view name) const;
31
32 template <typename FieldEntryT>
33 FieldEntryT* find_entry(std::string_view name) const;
34
35 public:
36 SubField(Field& field, std::string_view name);
37 ~SubField();
38
39 std::string_view name() const { return m_name; }
40
41 size_t size() const;
42 void resize(size_t num_elements);
43
44 template <FieldEntryLayout Layout>
46 const FieldBuildOptions& options = {});
53 const FieldBuildOptions& options = {});
59 FieldBuilder<FieldEntryLayout::AoSoA> AoSoA(uint32_t innermost_array_size = 32,
60 const FieldBuildOptions& options = {});
71
72 // delete copy and move
73 SubField(const SubField&) = delete;
74 SubField(SubField&&) = delete;
75 SubField& operator=(const SubField&) = delete;
76 SubField& operator=(SubField&&) = delete;
77
78 private:
79 friend class Field;
80 friend class SubField;
81 template <FieldEntryLayout Layout>
82 friend class FieldBuilder;
83 friend class FieldEntryBase;
84 template <typename T, FieldEntryLayout Layout, int M, int N>
85 friend class FieldEntry;
86
87 template <typename T, FieldEntryLayout Layout, int M, int N>
88 FieldEntry<T, Layout, M, N>& create_entry(std::string_view name,
90 FieldEntryType type,
91 uint2 shape);
92
93 void build(const FieldBuildOptions& options);
94 bool allow_inplace_shrink() const;
95};
96} // namespace muda
97
98#include "details/sub_field.inl"
Definition field_build_options.inl:6
Definition field_builder.h:15
Definition field_entry.h:19
Definition field_entry.h:76
Definition field_entry_layout.h:24
Definition field.h:17
Definition sub_field.h:18
FieldBuilder< FieldEntryLayout::AoS > AoS(const FieldBuildOptions &options={})
The layout is array of structs (determined at compile time)
Definition sub_field.inl:118
FieldBuilder< FieldEntryLayout::AoSoA > AoSoA(uint32_t innermost_array_size=32, const FieldBuildOptions &options={})
The layout is array of structs of arrays (determined at compile time)
Definition sub_field.inl:106
FieldBuilder< FieldEntryLayout::SoA > SoA(const FieldBuildOptions &options={})
The layout is struct of arrays (determined at compile time)
Definition sub_field.inl:113
A light-weight wrapper of cuda device memory. Like std::vector, allow user to resize,...