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)
139 m_shared_info->_setVarIndex(m_constituent_item_index, index);
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);
159 return m_shared_info->_firstSubConstituentLocalId(m_constituent_item_index);
167 m_shared_info->_setNbSubConstituent(m_constituent_item_index, nb_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);
184 ComponentItemSharedInfo* m_shared_info = ComponentItemSharedInfo::null_shared_info_pointer;
201inline constexpr matimpl::ConstituentItemBase ComponentItemSharedInfo::
202_item(ConstituentItemIndex
id)
204 return matimpl::ConstituentItemBase(
this,
id);
210 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
212 return m_super_component_item_shared_info->_item(super_local_id);
218 ARCCORE_CHECK_RANGE(
id.localId(), -1, m_storage_size);
220 return m_sub_component_item_shared_info->_item(lid);
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) };
288 return (m_ids.data() == rhs.m_ids.data());
293 bool t1 = a.m_component_shared_info == b.m_component_shared_info;
294 bool t2 = a.m_ids == b.m_ids;
308 ComponentItemSharedInfo* m_component_shared_info =
nullptr;
309 ConstArrayView<ConstituentItemIndex> m_ids;
313 void _checkCoherency()
const;
Constant view of an array of type T.
Index of an Item in a variable.
ConstituentItemIndex * m_first_sub_constituent_item_id_data
Id of the first sub-constituent entity.
ConstituentItemIndex * m_super_component_item_local_id_data
Id of the parent sub-constituent entity.
Index of a constituent entity in the list of constituent entities.
View of a ConstituentItemLocalIdList instance.
bool _isSamePointerData(const ConstituentItemLocalIdListView &rhs) const
For tests, verifies that the views point to the same data.
Interface of a component (material or environment) of a mesh.
Represents an index on material and environment variables.
General information about a constituent entity.
__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__ void _setVariableIndex(MatVarIndex index)
Positions the indexer in material variables.
__host__ __device__ matimpl::ConstituentItemBase _superItemBase() const
Parent component (0 if none).
__host__ __device__ ConstituentItemIndex _firstSubItemLocalId() const
First sub-component entity.
__host__ __device__ Int32 componentId() const
Component identifier.
__host__ __device__ Int32 nbSubItem() const
Number of sub-components.
__host__ __device__ void _setFirstSubItem(ConstituentItemIndex first_sub_item)
Positions the first sub-component.
__host__ __device__ void _setNbSubItem(Int16 nb_sub_item)
Positions the 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::int16_t Int16
Signed integer type of 16 bits.
std::int32_t Int32
Signed integer type of 32 bits.