12#ifndef ARCANE_CORE_MATERIALS_CONSTITUENTITEMBASE_H
13#define ARCANE_CORE_MATERIALS_CONSTITUENTITEMBASE_H
17#include "arcane/core/ItemInternal.h"
18#include "arcane/core/Item.h"
19#include "arcane/core/materials/ConstituentItemLocalId.h"
20#include "arcane/core/materials/ComponentItemInternal.h"
25namespace Arcane::Materials::matimpl
40class ARCANE_CORE_EXPORT ConstituentItemBase
47 friend MeshMaterialMng;
48 friend ComponentItemSharedInfo;
50 friend MeshEnvironment;
51 friend MeshComponentData;
52 friend ComponentItemInternalData;
56 ARCCORE_HOST_DEVICE
constexpr ConstituentItemBase(ComponentItemSharedInfo* shared_info,
ConstituentItemIndex id)
57 : m_constituent_item_index(
id)
58 , m_shared_info(shared_info)
67 return m_shared_info->_varIndex(m_constituent_item_index);
72 return m_constituent_item_index;
78 return m_shared_info->_componentId(m_constituent_item_index);
82 inline ARCCORE_HOST_DEVICE
constexpr bool null()
const
84 return m_constituent_item_index.isNull();
95 return m_shared_info->_component(m_constituent_item_index);
101 return m_shared_info->_nbSubConstituent(m_constituent_item_index);
107 return m_shared_info->_globalItemBase(m_constituent_item_index);
110 inline ARCCORE_HOST_DEVICE
constexpr Int32 level()
const
112 return m_shared_info->m_level;
118 return m_shared_info->_componentUniqueId(m_constituent_item_index);
123 ARCCORE_HOST_DEVICE
constexpr friend bool
126 return ((a.m_constituent_item_index == b.m_constituent_item_index) && (a.m_shared_info == b.m_shared_info));
128 ARCCORE_HOST_DEVICE
constexpr friend bool
129 operator!=(
const ConstituentItemBase& a,
const ConstituentItemBase& b)
137 ARCCORE_HOST_DEVICE
inline void _setVariableIndex(
MatVarIndex index)
139 m_shared_info->_setVarIndex(m_constituent_item_index, index);
143 ARCCORE_HOST_DEVICE
inline matimpl::ConstituentItemBase _superItemBase()
const;
145 ARCCORE_HOST_DEVICE
inline void _setSuperAndGlobalItem(ConstituentItemIndex cii, ItemLocalId ii)
147 m_shared_info->_setSuperItem(m_constituent_item_index, cii);
148 m_shared_info->_setGlobalItem(m_constituent_item_index, ii);
151 ARCCORE_HOST_DEVICE
inline void _setGlobalItem(ItemLocalId ii)
153 m_shared_info->_setGlobalItem(m_constituent_item_index, ii);
157 inline ARCCORE_HOST_DEVICE ConstituentItemIndex _firstSubItemLocalId()
const
159 return m_shared_info->_firstSubConstituentLocalId(m_constituent_item_index);
162 inline ARCCORE_HOST_DEVICE matimpl::ConstituentItemBase _subItemBase(Int32 i)
const;
165 ARCCORE_HOST_DEVICE
void _setNbSubItem(Int16 nb_sub_item)
167 m_shared_info->_setNbSubConstituent(m_constituent_item_index, nb_sub_item);
171 ARCCORE_HOST_DEVICE
void _setFirstSubItem(ConstituentItemIndex first_sub_item)
173 m_shared_info->_setFirstSubConstituentLocalId(m_constituent_item_index, first_sub_item);
176 ARCCORE_HOST_DEVICE
void _setComponent(Int16 component_id)
178 m_shared_info->_setComponentId(m_constituent_item_index, component_id);
183 ConstituentItemIndex m_constituent_item_index;
184 ComponentItemSharedInfo* m_shared_info = ComponentItemSharedInfo::null_shared_info_pointer;
204 return matimpl::ConstituentItemBase(
this,
id);
210 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
211 ConstituentItemIndex super_local_id(m_super_component_item_local_id_data[
id.localId()]);
212 return m_super_component_item_shared_info->_item(super_local_id);
218 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
219 ConstituentItemIndex lid(m_first_sub_constituent_item_id_data[
id.localId()].localId() + sub_index);
220 return m_sub_component_item_shared_info->_item(lid);
227_superItemBase()
const
229 return m_shared_info->_superItemBase(m_constituent_item_index);
232inline ARCCORE_HOST_DEVICE matimpl::ConstituentItemBase matimpl::ConstituentItemBase::
233_subItemBase(
Int32 i)
const
235 return m_shared_info->_subItemBase(m_constituent_item_index, i);
248class ARCANE_CORE_EXPORT ConstituentItemLocalIdListView
250 friend class ConstituentItemLocalIdList;
251 friend class ComponentItemVectorView;
252 friend class MeshComponentPartData;
253 friend class ComponentPartItemVectorView;
254 friend class ComponentPartCellEnumerator;
255 friend class ComponentCellEnumerator;
256 friend class MeshEnvironment;
260 ConstituentItemLocalIdListView() =
default;
261 ConstituentItemLocalIdListView(ComponentItemSharedInfo* shared_info,
263 : m_component_shared_info(shared_info)
275 return m_component_shared_info->_item(m_ids[index]);
279 return m_component_shared_info->_varIndex(m_ids[index]);
281 ConstituentItemLocalIdListView _subView(
Int32 begin,
Int32 size)
const
283 return { m_component_shared_info, m_ids.subView(begin, size) };
286 bool _isSamePointerData(
const ConstituentItemLocalIdListView& rhs)
const
288 return (m_ids.data() == rhs.m_ids.data());
290 friend bool operator==(
const ConstituentItemLocalIdListView& a,
291 const ConstituentItemLocalIdListView& b)
293 bool t1 = a.m_component_shared_info == b.m_component_shared_info;
294 bool t2 = a.m_ids == b.m_ids;
297 friend bool operator!=(
const ConstituentItemLocalIdListView& a,
298 const ConstituentItemLocalIdListView& b)
308 ComponentItemSharedInfo* m_component_shared_info =
nullptr;
313 void _checkCoherency()
const;
Constant view of an array of type T.
Interface of a component (material or environment) of a mesh.
Represents an index on material and environment variables.
__host__ __device__ MatVarIndex variableIndex() const
Indexer in material variables.
IMeshComponent * component() const
Associated component.
__host__ __device__ constexpr bool null() const
Indicates if it is the null cell.
__host__ __device__ Int32 componentId() const
Component identifier.
__host__ __device__ Int32 nbSubItem() const
Number of sub-components.
Int64 componentUniqueId() const
Unique ID of the component entity.
impl::ItemBase globalItemBase() const
Corresponding global entity.
Always enables tracing in Arcane parts concerning materials.
std::int64_t Int64
Signed integer type of 64 bits.
std::int32_t Int32
Signed integer type of 32 bits.