Blender V5.0
NOD_socket_items_blend.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 "BLO_read_write.hh"
8
9#include "NOD_socket_items.hh"
10
12
13template<typename Accessor> inline void blend_write(BlendWriter *writer, const bNode &node)
14{
15 using ItemT = typename Accessor::ItemT;
16 const SocketItemsRef<ItemT> items = Accessor::get_items_from_node(const_cast<bNode &>(node));
18 writer, dna::sdna_struct_id_get<ItemT>(), *items.items_num, *items.items);
19 for (const ItemT &item : Span(*items.items, *items.items_num)) {
20 Accessor::blend_write_item(writer, item);
21 }
22}
23
24template<typename Accessor> inline void blend_read_data(BlendDataReader *reader, bNode &node)
25{
26 using ItemT = typename Accessor::ItemT;
27 const SocketItemsRef<ItemT> items = Accessor::get_items_from_node(node);
28 *items.items = static_cast<ItemT *>(
29 BLO_read_struct_array_with_size(reader, *items.items, sizeof(ItemT) * *items.items_num));
30 for (ItemT &item : MutableSpan(*items.items, *items.items_num)) {
31 Accessor::blend_read_data_item(reader, item);
32 }
33}
34
35} // namespace blender::nodes::socket_items
void * BLO_read_struct_array_with_size(BlendDataReader *reader, const void *old_address, size_t expected_size)
Definition readfile.cc:5711
void BLO_write_struct_array_by_id(BlendWriter *writer, int struct_id, int64_t array_size, const void *data_ptr)
int sdna_struct_id_get()
void blend_write(BlendWriter *writer, const bNode &node)
void blend_read_data(BlendDataReader *reader, bNode &node)