Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
core/materials/ComponentItemVector.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* ComponentItemVector.h (C) 2000-2024 */
9/* */
10/* Vecteur sur des entités composants. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MATERIALS_COMPONENTITEMVECTOR_H
13#define ARCANE_CORE_MATERIALS_COMPONENTITEMVECTOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/Ref.h"
20
21#include "arcane/core/ItemGroup.h"
22
23#include "arcane/core/materials/IMeshComponent.h"
24#include "arcane/core/materials/ComponentItemVectorView.h"
25#include "arcane/core/materials/ComponentPartItemVectorView.h"
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane::Materials
31{
32class ConstituentItemLocalIdList;
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36/*!
37 * \brief Interface pour l'implémentation de ComponentItemVector.
38 */
40{
41 friend class ComponentItemVector;
43
44 public:
45
46 virtual ~IConstituentItemVectorImpl() = default;
47
48 protected:
49
50 virtual ComponentItemVectorView _view() const = 0;
51 virtual ComponentPurePartItemVectorView _pureItems() const = 0;
52 virtual ComponentImpurePartItemVectorView _impureItems() const = 0;
53 virtual ConstArrayView<Int32> _localIds() const = 0;
54 virtual IMeshMaterialMng* _materialMng() const = 0;
55 virtual IMeshComponent* _component() const = 0;
56 virtual ConstArrayView<MatVarIndex> _matvarIndexes() const = 0;
57 virtual ConstituentItemLocalIdListView _constituentItemListView() const = 0;
58 virtual void _setItems(SmallSpan<const Int32> local_ids) = 0;
59};
60
61/*---------------------------------------------------------------------------*/
62/*---------------------------------------------------------------------------*/
63/*!
64 * \brief Vecteur sur les entités d'un composant.
65 *
66 * \warning Ce vecteur n'est valide que tant que le milieu et le groupe support
67 * ne change pas.
68 *
69 * Cette classe est similaire à la classe ItemVector mais contient une liste
70 * d'entités d'un composant (IMeshComponent). Toutes les entités doivent
71 * appartenir au même composant.
72 *
73 * Cette classe utilise une sémantique par référence. Pour effectuer une copie,
74 * il faut utiliser la commande clone() ou construire un objet via une vue:
75 *
76 \code
77 * ComponentItemVector v1 = ...;
78 * ComponentItemVector v2 = v1; // v2 fait référence à v1
79 * ComponentItemVector v3 = v1.clone(); // v3 est une copie de v1
80 * ComponentItemVector v4 = v1.view(); // v4 est une copie de v1
81 \endcode
82 */
83class ARCANE_CORE_EXPORT ComponentItemVector
84{
85 public:
86
87 //! Constructeur de recopie. Cette instance fait ensuite référence à \a rhs
89
90 //! Opérateur de recopie
92
93 protected:
94
95 //! Construit un vecteur pour le composant \a component
96 explicit ComponentItemVector(IMeshComponent* component);
97 //! Constructeur de recopie. Cette instance est une copie de \a rhs.
99
100 public:
101
102 //! Conversion vers une vue sur ce vecteur
103 operator ComponentItemVectorView() const
104 {
105 return view();
106 }
107
108 //! Vue sur ce vecteur
109 ComponentItemVectorView view() const;
110
111 //! Composant associé
112 IMeshComponent* component() const { return _component(); }
113
114 //! Clone ce vecteur
116
117 public:
118
119 //! Liste des entités pures (associées à la maille globale) du composant
120 ComponentPurePartItemVectorView pureItems() const;
121 //! Liste des entités impures (partielles) du composant
122 ComponentImpurePartItemVectorView impureItems() const;
123
124 protected:
125
126 ConstArrayView<MatVarIndex> _matvarIndexes() const;
127 ConstituentItemLocalIdListView _constituentItemListView() const;
128
129 protected:
130
131 void _setItems(SmallSpan<const Int32> local_ids);
132 ConstArrayView<Int32> _localIds() const;
133 IMeshMaterialMng* _materialMng() const;
134 IMeshComponent* _component() const;
135
136 private:
137
138 Ref<IConstituentItemVectorImpl> m_p;
139};
140
141/*---------------------------------------------------------------------------*/
142/*---------------------------------------------------------------------------*/
143
144} // End namespace Arcane::Materials
145
146/*---------------------------------------------------------------------------*/
147/*---------------------------------------------------------------------------*/
148
149#endif
150
#define ARCCORE_DECLARE_REFERENCE_COUNTED_INCLASS_METHODS()
Macro pour déclarer les méthodes virtuelles gérant les compteurs de référence.
Vue sur un vecteur sur les entités d'un composant.
IMeshComponent * component() const
Composant associé
ComponentItemVector(const ComponentItemVector &rhs)=default
Constructeur de recopie. Cette instance fait ensuite référence à rhs.
ComponentItemVector clone() const
Clone ce vecteur.
ComponentItemVector & operator=(const ComponentItemVector &)=default
Opérateur de recopie.
Interface pour l'implémentation de ComponentItemVector.
Interface d'un composant (matériau ou milieu) d'un maillage.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Vue constante d'un tableau de type T.
Vue d'un tableau d'éléments de type T.
Definition Span.h:670
Active toujours les traces dans les parties Arcane concernant les matériaux.