Arcane  v3.16.0.0
Documentation développeur
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
41class ARCANE_CORE_EXPORT ItemPairGroup
42{
43 public:
49 public:
58 ItemPairGroup(const ItemGroup& group,const ItemGroup& sub_item_group,
59 eItemKind link_kind);
61 ItemPairGroup(const ItemGroup& group,const ItemGroup& sub_item_group,
62 CustomFunctor* functor);
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
77 inline bool null() const { return m_impl->null(); }
79 inline eItemKind itemKind() const { return m_impl->itemKind(); }
81 inline eItemKind subItemKind() const { return m_impl->subItemKind(); }
82
83 public:
84
92 ItemPairGroupImpl* internal() const { return m_impl.get(); }
93
95 IItemFamily* itemFamily() const { return m_impl->itemFamily(); }
96
98 IItemFamily* subItemFamily() const { return m_impl->subItemFamily(); }
99
101 IMesh* mesh() const { return m_impl->mesh(); }
102
104 const ItemGroup& itemGroup() const { return m_impl->itemGroup(); }
105
107 const ItemGroup& subItemGroup() const { return m_impl->subItemGroup(); }
108
109 public:
110
113 void invalidate(bool force_recompute=false)
114 {
115 m_impl->invalidate(force_recompute);
116 }
117
119 void checkValid() { m_impl->checkValid(); }
120
121 public:
122
123 ItemPairEnumerator enumerator() const;
124
125 protected:
126
129
130 protected:
131
134 {
135 return (impl->itemKind()==ik && impl->subItemKind()==aik) ? impl : ItemPairGroupImpl::checkSharedNull();
136 }
137};
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
146inline bool
147operator==(const ItemPairGroup& g1,const ItemPairGroup& g2)
148{
149 return g1.internal()==g2.internal();
150}
151
157inline bool
158operator!=(const ItemPairGroup& g1,const ItemPairGroup& g2)
159{
160 return g1.internal()!=g2.internal();
161}
162
163/*---------------------------------------------------------------------------*/
164/*---------------------------------------------------------------------------*/
168template<typename ItemKind,typename SubItemKind>
169class ItemPairGroupT
170: public ItemPairGroup
171{
172 public:
173
175 typedef ItemPairGroupT<ItemKind,SubItemKind> ThatClass;
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.
Implémentation d'un tableau de listes d'entités.
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.
Wrapper sur un fonctor ItemPairGroup::CustomFunctor.
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)
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
eItemKind
Genre d'entité de maillage.