Arcane  v3.14.10.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:
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
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>
170: public ItemPairGroup
171{
172 public:
173
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
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
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.
Implémentation d'un tableau de listes d'entités.
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.
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)
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)
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Interface d'un fonctor avec argument mais sans valeur de retour.
eItemKind
Genre d'entité de maillage.