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