Arcane  v3.14.10.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>
170: public ItemPairGroup
171{
172 public:
173
174 //! Type de cette classe
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
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'une famille d'entités.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Enumérateur sur un tableau de tableaux d'entités du maillage.
eItemKind subItemKind() const
Genre du groupe. Il s'agit du genre de ses éléments.
eItemKind itemKind() const
Genre du groupe. Il s'agit du genre de ses éléments.
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)
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)
Interface d'un fonctor avec argument mais sans valeur de retour.
eItemKind
Genre d'entité de maillage.