Arcane  v3.16.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemPairGroup.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* ItemPairGroup.h (C) 2000-2025 */
9/* */
10/* Tableau de listes d'entités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMPAIRGROUP_H
13#define ARCANE_CORE_ITEMPAIRGROUP_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/AutoRef.h"
18#include "arcane/utils/Iterator.h"
19#include "arcane/utils/IFunctorWithArgument.h"
20
21#include "arcane/core/ItemPairGroupImpl.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32//NOTE: la documentation complète est dans ItemPairGroup.cc
33/*!
34 * \brief Tableau de listes d'entités.
35 */
36class ARCANE_CORE_EXPORT ItemPairGroup
37{
38 public:
39
40 /*!
41 * \brief Functor pour un calcul personnalisé des connectivités.
42 */
45
46 public:
47
48 //! Construit un tableau vide.
50 //! Construit un groupe à partir de la représentation interne \a prv
51 explicit ItemPairGroup(ItemPairGroupImpl* prv);
52 /*!
53 * \brief Construit une instance en spécifiant le voisinage via les entités
54 * de genre \a link_kind.
55 */
56 ItemPairGroup(const ItemGroup& group, const ItemGroup& sub_item_group,
57 eItemKind link_kind);
58 //! Construit une instance avec un fonctor particulier.
59 ItemPairGroup(const ItemGroup& group, const ItemGroup& sub_item_group,
60 CustomFunctor* functor);
61 //! Constructeur de recopie.
63 : m_impl(from.m_impl)
64 {}
65
66 const ItemPairGroup& operator=(const ItemPairGroup& from)
67 {
68 m_impl = from.m_impl;
69 return (*this);
70 }
71 virtual ~ItemPairGroup() = default;
72
73 public:
74
75 //! \a true is le groupe est le groupe nul
76 inline bool null() const { return m_impl->null(); }
77 //! Type des entités du groupe
78 inline eItemKind itemKind() const { return m_impl->itemKind(); }
79 //! Type des sous-entités du groupe
80 inline eItemKind subItemKind() const { return m_impl->subItemKind(); }
81
82 public:
83
84 /*!
85 * \brief Retourne l'implémentation du groupe.
86 *
87 * \warning Cette méthode retourne un pointeur sur la représentation
88 * interne du groupe et ne doit pas être utilisée
89 * en dehors d'Arcane.
90 */
91 ItemPairGroupImpl* internal() const { return m_impl.get(); }
92
93 //! Famille d'entité à laquelle appartient ce groupe (0 pour une liste nulle)
94 IItemFamily* itemFamily() const { return m_impl->itemFamily(); }
95
96 //! Famille d'entité à laquelle appartient ce groupe (0 pour une liste nulle)
97 IItemFamily* subItemFamily() const { return m_impl->subItemFamily(); }
98
99 //! Maillage auquel appartient cette liste (0 pour une liste nulle)
100 IMesh* mesh() const { return m_impl->mesh(); }
101
102 //! Groupe des items initiaux
103 const ItemGroup& itemGroup() const { return m_impl->itemGroup(); }
104
105 //! Groupe des items finaux (après rebond)
106 const ItemGroup& subItemGroup() const { return m_impl->subItemGroup(); }
107
108 public:
109
110 /*! \brief Invalide la liste.
111 */
112 void invalidate(bool force_recompute = false)
113 {
114 m_impl->invalidate(force_recompute);
115 }
116
117 //! Vérification interne de la validité du groupe
118 void checkValid() { m_impl->checkValid(); }
119
120 public:
121
122 ItemPairEnumerator enumerator() const;
123
124 protected:
125
126 //! Représentation interne du groupe.
128
129 protected:
130
131 //! Retourne le groupe \a impl s'il est du genre \a kt, le groupe nul sinon
133 {
134 return (impl->itemKind() == ik && impl->subItemKind() == aik) ? impl : ItemPairGroupImpl::checkSharedNull();
135 }
136};
137
138/*---------------------------------------------------------------------------*/
139/*---------------------------------------------------------------------------*/
140/*!
141 * \brief Compare les références de deux groupes.
142 * \retval true si \a g1 et \a g2 réfèrent au même groupe,
143 * \retval false sinon.
144 */
145inline bool
146operator==(const ItemPairGroup& g1, const ItemPairGroup& g2)
147{
148 return g1.internal() == g2.internal();
149}
150
151/*!
152 * \brief Compare les références de deux groupes.
153 * \retval true si \a g1 et \a g2 ne réfèrent pas au même groupe,
154 * \retval false sinon.
155 */
156inline bool
157operator!=(const ItemPairGroup& g1, const ItemPairGroup& g2)
158{
159 return g1.internal() != g2.internal();
160}
161
162/*---------------------------------------------------------------------------*/
163/*---------------------------------------------------------------------------*/
164/*!
165 * \brief Référence à un groupe d'un genre donné.
166 */
167template <typename ItemKind, typename SubItemKind>
168class ItemPairGroupT
169: public ItemPairGroup
170{
171 public:
172
173 //! Type de cette classe
174 typedef ItemPairGroupT<ItemKind, SubItemKind> ThatClass;
175 //! Type de la classe contenant les caractéristiques de l'entité
177 typedef ItemTraitsT<SubItemKind> SubTraitsType;
178
179 typedef typename TraitsType::ItemType ItemType;
180 typedef typename TraitsType::ItemGroupType ItemGroupType;
181 typedef typename SubTraitsType::ItemType SubItemType;
182 typedef typename SubTraitsType::ItemGroupType SubItemGroupType;
183
184 public:
185
186 ItemPairGroupT() {}
187 ItemPairGroupT(const ItemPairGroup& from)
188 : ItemPairGroup(_check(from.internal(), TraitsType::kind(), SubTraitsType::kind()))
189 {}
190 ItemPairGroupT(const ThatClass& from)
191 : ItemPairGroup(from)
192 {}
193 ItemPairGroupT(const ItemGroupType& group, const SubItemGroupType& sub_group,
194 eItemKind link_kind)
195 : ItemPairGroup(group, sub_group, link_kind)
196 {}
197 ItemPairGroupT(const ItemGroupType& group, const SubItemGroupType& sub_group,
198 CustomFunctor* functor)
199 : ItemPairGroup(group, sub_group, functor)
200 {}
201 ~ItemPairGroupT() {}
202
203 public:
204
205 const ThatClass& operator=(const ThatClass& from)
206 {
207 m_impl = from.internal();
208 return (*this);
209 }
210 const ThatClass& operator=(const ItemPairGroup& from)
211 {
212 _assign(from);
213 return (*this);
214 }
215
216 protected:
217
218 void _assign(const ItemPairGroup& from)
219 {
220 m_impl = _check(from.internal(), TraitsType::kind(), SubTraitsType::kind());
221 }
222};
223
224/*---------------------------------------------------------------------------*/
225/*---------------------------------------------------------------------------*/
226
227} // namespace Arcane
228
229/*---------------------------------------------------------------------------*/
230/*---------------------------------------------------------------------------*/
231
232#endif
Déclarations de types sur les entités.
Encapsulation d'un pointeur avec compteur de référence.
Definition AutoRef.h:41
Interface d'un fonctor avec argument mais sans valeur de retour.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Enumérateur sur un tableau de tableaux d'entités du maillage.
Référence à un groupe d'un genre donné.
ItemTraitsT< ItemKind > TraitsType
Type de la classe contenant les caractéristiques de l'entité
ItemPairGroupT< ItemKind, SubItemKind > ThatClass
Type de cette classe.
Tableau de listes d'entités.
IFunctorWithArgumentT< ItemPairGroupBuilder & > CustomFunctor
Functor pour un calcul personnalisé des connectivités.
eItemKind itemKind() const
Type des entités du groupe.
const ItemGroup & itemGroup() const
Groupe des items initiaux.
IItemFamily * itemFamily() const
Famille d'entité à laquelle appartient ce groupe (0 pour une liste nulle)
eItemKind subItemKind() const
Type des sous-entités du groupe.
ItemPairGroup(const ItemPairGroup &from)
Constructeur de recopie.
static ItemPairGroupImpl * _check(ItemPairGroupImpl *impl, eItemKind ik, eItemKind aik)
Retourne le groupe impl s'il est du genre kt, le groupe nul sinon.
void checkValid()
Vérification interne de la validité du groupe.
void invalidate(bool force_recompute=false)
Invalide la liste.
IItemFamily * subItemFamily() const
Famille d'entité à laquelle appartient ce groupe (0 pour une liste nulle)
ItemPairGroup()
Construit un tableau vide.
AutoRefT< ItemPairGroupImpl > m_impl
Représentation interne du groupe.
const ItemGroup & subItemGroup() const
Groupe des items finaux (après rebond)
ItemPairGroupImpl * internal() const
Retourne l'implémentation du groupe.
bool null() const
true is le groupe est le groupe nul
IMesh * mesh() const
Maillage auquel appartient cette liste (0 pour une liste nulle)
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.