Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
ItemData.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* ItemData.cc (C) 2000-2025 */
9/* */
10/* Class gathering item data: IDs and connectivities */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/ITraceMng.h"
15#include "arcane/utils/CheckedConvert.h"
16
17#include "arcane/core/IParallelMng.h"
18#include "arcane/core/MeshPartInfo.h"
19
20#include "arcane/mesh/ItemData.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane::mesh
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31void ItemData::
32serialize(ISerializer* buffer)
33{
34 switch (buffer->mode()) {
35 case ISerializer::ModeReserve: {
36 buffer->reserve(m_item_family->name());
37 buffer->reserve(itemKindName(m_item_family->itemKind()));
38 buffer->reserveInt64(2); // nb_items + item_infos.size
39 buffer->reserveSpan(eBasicDataType::Int32, m_nb_items); // m_owners
40 buffer->reserveSpan(eBasicDataType::Int64, m_item_infos.size());
41 } break;
43 buffer->put(m_item_family->name());
44 buffer->put(itemKindName(m_item_family->itemKind()));
45 buffer->putInt64(m_nb_items);
46 buffer->putInt64(m_item_infos.size());
47 buffer->putSpan(m_item_owners);
48 buffer->putSpan(m_item_infos);
49 } break;
51 deserialize(buffer, m_item_family->mesh());
52 } break;
53 }
54}
55
56/*---------------------------------------------------------------------------*/
57/*---------------------------------------------------------------------------*/
58
59void ItemData::
60deserialize(ISerializer* buffer, IMesh* mesh)
61{
62 _deserialize(buffer, mesh);
63 // use internal lids array
64 _internal_item_lids.resize(m_nb_items);
65 m_item_lids = _internal_item_lids;
66}
67
68/*---------------------------------------------------------------------------*/
69/*---------------------------------------------------------------------------*/
70
71void ItemData::
72deserialize(ISerializer* buffer, IMesh* mesh, Int32Array& item_lids)
73{
74 _deserialize(buffer, mesh);
75 item_lids.resize(m_nb_items);
76 m_item_lids = item_lids;
77}
78
79/*---------------------------------------------------------------------------*/
80/*---------------------------------------------------------------------------*/
81
82void ItemData::
83_deserialize(ISerializer* buffer, IMesh* mesh)
84{
85 ARCANE_ASSERT((buffer->mode() == ISerializer::ModeGet),
86 ("Impossible to deserialize a buffer not in ModeGet. In ItemData::deserialize.Exiting"))
87 String family_name;
88 buffer->get(family_name);
89 String item_kind_name;
90 buffer->get(item_kind_name);
91 std::istringstream iss(item_kind_name.localstr());
92 eItemKind family_kind;
93 iss >> family_kind;
94 m_item_family = mesh->findItemFamily(family_kind, family_name, false);
95 m_item_family_modifier = mesh->findItemFamilyModifier(family_kind, family_name);
96 m_nb_items = CheckedConvert::toInt32(buffer->getInt64());
97 m_item_owners.resize(m_nb_items);
98 m_item_infos.resize(buffer->getInt64());
99 buffer->getSpan(m_item_owners);
100 buffer->getSpan(m_item_infos);
101 m_subdomain_id = mesh->meshPartInfo().partRank();
102 // mesh->traceMng()->debug() << " DESERIALIZE " << m_item_owners;
103 // mesh->traceMng()->debug() << " DESERIALIZE " << m_item_infos;
104}
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107
108void ItemData::
109clear()
110{
111 m_nb_items = 0;
112 m_item_infos.clear();
113 _internal_item_lids.clear();
114 m_item_lids = Int32ArrayView();
115 m_item_owners.clear();
116 m_item_family = nullptr;
117 m_item_family_modifier = nullptr;
118 m_subdomain_id = -1;
119}
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
123
124} // End namespace Arcane::mesh
125
126/*---------------------------------------------------------------------------*/
127/*---------------------------------------------------------------------------*/
ItemData()
Data structure necessary for generic item addition.
Definition ItemData.h:64
ArrayView< Int32 > Int32ArrayView
C equivalent of a 1D array of 32-bit integers.
Definition UtilsTypes.h:453
eItemKind
Mesh entity type.
const char * itemKindName(eItemKind kind)
Entity kind name.
Array< Int32 > Int32Array
Dynamic one-dimensional array of 32-bit integers.
Definition UtilsTypes.h:127