Arcane  v3.15.3.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
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.
Référence à une instance.
Active toujours les traces dans les parties Arcane concernant les matériaux.