12#ifndef ARCANE_CORE_MATERIALS_CONSTITUENTITEMINDEXEDSELECTIONVIEW_H
13#define ARCANE_CORE_MATERIALS_CONSTITUENTITEMINDEXEDSELECTIONVIEW_H
17#include "arcane/core/materials/MaterialsCoreGlobal.h"
18#include "arcane/core/materials/ComponentItemVectorView.h"
23namespace Arcane::Materials::Impl
35template <
typename ContainerType_>
38template <
typename ConstituentContainerType_>
41 using ThatContainer = ConstituentContainerType_;
42 using ValueType = ThatContainer::ValueType;
43 static constexpr bool IsSpan() {
return false; }
44 static ARCCORE_HOST_DEVICE
Int32 size(ThatContainer v)
81template <
typename ConstituentItemType_>
85 using ValueType = ConstituentItemType_;
86 static constexpr bool IsSpan() {
return true; }
87 static ARCCORE_HOST_DEVICE
Int32 size(ThatContainer v)
91 static ARCCORE_HOST_DEVICE ValueType item(ThatContainer v,
Int32 i)
136template <
typename ContainerView_>
137class ConstituentItemIndexedSelectionView
141 using ItemVecView = ContainerView_;
142 using ThatClass = ConstituentItemIndexedSelectionView;
145 using ValueType = TraitsType::ValueType;
146 static constexpr bool IsSpanContainer() {
return TraitsType::IsSpan(); }
150 ConstituentItemIndexedSelectionView(ItemVecView ecv, IndexArrayView indices)
151 : m_container_view(ecv)
152 , m_selection_view(indices)
158 requires(!IsSpanContainer())
159 : m_container_view(view)
160 , m_selection_view(nullptr, TraitsType::
size(m_container_view))
161 , m_is_full_selection(true)
167 requires(IsSpanContainer())
168 : m_container_view(ecv)
169 , m_selection_view(nullptr, TraitsType::
size(m_container_view))
170 , m_is_full_selection(true)
178 ARCCORE_HOST_DEVICE
Int32 size()
const {
return m_selection_view.size(); }
181 ARCCORE_HOST_DEVICE
Int32 sourceSize()
const {
return TraitsType::size(m_container_view); }
184 ItemVecView sourceView()
const {
return m_container_view; }
187 IndexArrayView selectionView()
const
192 ARCCORE_HOST_DEVICE ValueType operator[](
Int32 i)
const
196 ARCCORE_HOST_DEVICE ValueType item(
Int32 i)
const
198 ARCANE_CHECK_AT(i,
size());
199 return TraitsType::item(m_container_view, m_is_full_selection ? i : m_selection_view[i]);
205 ItemVecView m_container_view;
213 IndexArrayView m_selection_view = {};
216 const bool m_is_full_selection =
false;
224template <
typename ContainerView_>
225class ConstituentItemIndexedSelectionEnumerator
230 using ValueType = SelectionType::ValueType;
232 friend class EnumeratorTracer;
237 explicit ConstituentItemIndexedSelectionEnumerator(
const SelectionType& v)
239 , m_container_with_selection(v)
244 void operator++() { ++m_index; }
245 bool hasNext()
const {
return m_index < m_size; }
247 ValueType operator*()
const
249 return m_container_with_selection.item(m_index);
252 Int32 index()
const {
return m_index; }
258 SelectionType m_container_with_selection;
Vue sur un vecteur sur les entités d'un composant.
__host__ __device__ ComponentCell componentCell(Int32 index) const
Retourne la index-ème ComponentCell de la vue.
Enumérateur sur les éléments d'un ConstituentItemIndexedSelectionView.
Vue sur un sous ensemble d'un conteneur de ConstituentItem.
__host__ __device__ Int32 size() const
ConstituentItemIndexedSelectionView(ItemVecView view)
Construit une sélection contenant tous les éléments de \view.
ConstituentItemIndexedSelectionView(IMeshComponent *constituent, SmallSpan< const ValueType > ecv)
Constructeur à partir d'une vue de ConstituentCell, de MatCell ou EnvCell.
constexpr bool isFullSelection() const
indique si la selection est triviale ou pleine, c'est à dire que l'on a pas de liste d'indices et doi...
Représente un composant d'une maille multi-matériau.
Maille arcane d'un milieu.
__host__ __device__ EnvCell envCell(Int32 index) const
Récupère la index-ème EnvCell de la vue.
Interface d'un composant (matériau ou milieu) d'un maillage.
Spécialisation partielle pour un SmallSpan<T>
Représente un matériau d'une maille multi-matériau.
__host__ __device__ MatCell matCell(Int32 index) const
Récupère la index-ème MatCell de la vue.
Vue d'un tableau d'éléments de type T.
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
constexpr ConstArrayView< value_type > constSmallView() const
Vue constante sur cette vue.
Active toujours les traces dans les parties Arcane concernant les matériaux.
EnvItemVectorView EnvCellVectorView
Type de la vue sur un EnvCellVector.
MatItemVectorView MatCellVectorView
Type de la vue sur un MatCellVector.
std::int32_t Int32
Type entier signé sur 32 bits.
Caractéristiques pour le conteneur associé à ConstituentItemIndexedSelectionView.