17 using U = std::unique_ptr<T>;
19 template <FieldEntryLayout Layout>
24 std::vector<U<FieldEntryBase>> m_entries;
27 std::unordered_map<std::string, size_t> m_name_to_index;
28 size_t m_num_elements = 0;
29 uint32_t m_struct_stride = ~0;
30 std::byte* m_data_buffer =
nullptr;
31 size_t m_data_buffer_size = 0;
36 virtual void build_impl() = 0;
37 virtual size_t require_total_buffer_byte_size(
size_t element_count) = 0;
38 virtual void calculate_new_cores(std::byte* byte_buffer,
41 span<FieldEntryCore> new_cores) = 0;
42 virtual bool allow_inplace_shrink()
const {
return true; }
50 size_t num_elements()
const {
return m_num_elements; }
51 static uint32_t round_up(uint32_t total, uint32_t N);
52 static uint32_t align(uint32_t offset, uint32_t size, uint32_t min_alignment, uint32_t max_alignment);
65 std::vector<FieldEntryCore> m_new_cores;
66 std::vector<HostDeviceConfig<FieldEntryCore>> m_host_device_new_cores;
71 void aync_upload_cores();
72 void async_upload_temp_cores();
74 void resize_data_buffer(
size_t size, F&& func);
79 void resize(
size_t num_elements);
Definition field_entry_layout.h:24