Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemConnectedEnumerator.h
Aller à la documentation de ce fichier.
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* ItemConnectedEnumerator.h (C) 2000-2023 */
9/* */
10/* Enumérateurs sur les entités connectées du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ITEMCONNECTEDENUMERATOR_H
13#define ARCANE_ITEMCONNECTEDENUMERATOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/Item.h"
18#include "arcane/core/ItemConnectedEnumeratorBase.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22/*!
23 * \file ItemConnectedEnumerator.h
24 *
25 * \brief Types et macros pour itérer sur les entités du maillage connectées
26 * à une autre entité.
27 */
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31namespace Arcane
32{
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36/*!
37 * \brief Enumérateur sur une liste d'entités connectées à une autre.
38 */
39class ItemConnectedEnumerator
40: public ItemConnectedEnumeratorBaseT<Item>
41{
42 friend class ItemGroup;
43 friend class ItemVector;
44 friend class ItemVectorView;
45 friend class ItemPairEnumerator;
46 template<int Extent> friend class ItemConnectedListView;
47 // NOTE: Normalement il suffirait de faire cela:
48 // template<class T> friend class ItemConnectedEnumeratorBase;
49 // mais cela ne fonctionne pas avec GCC 8. On fait donc la spécialisation
50 // à la main
51 friend class ItemConnectedEnumeratorBaseT<Item>;
52 friend class ItemConnectedEnumeratorBaseT<Node>;
53 friend class ItemConnectedEnumeratorBaseT<ItemWithNodes>;
54 friend class ItemConnectedEnumeratorBaseT<Edge>;
55 friend class ItemConnectedEnumeratorBaseT<Face>;
56 friend class ItemConnectedEnumeratorBaseT<Cell>;
57 friend class ItemConnectedEnumeratorBaseT<Particle>;
58 friend class ItemConnectedEnumeratorBaseT<DoF>;
59
60 public:
61
62 using BaseClass = ItemConnectedEnumeratorBaseT<Item>;
63
64 public:
65
66 ItemConnectedEnumerator() = default;
67
68 public:
69
70 ItemConnectedEnumerator(const impl::ItemIndexedListView<DynExtent>& rhs)
71 : BaseClass(rhs)
72 {}
73
74 template<int E> ItemConnectedEnumerator(const ItemConnectedListView<E>& rhs)
75 : BaseClass(ItemConnectedListViewT<Item,E>(rhs)){}
76
77 protected:
78
79 ItemConnectedEnumerator(ItemSharedInfo* s, const Int32ConstArrayView& local_ids)
80 : BaseClass(s, local_ids)
81 {}
82
83 private:
84
85 ItemConnectedEnumerator(const Int32* local_ids, Int32 index, Int32 n, Item item_base)
86 : BaseClass(local_ids, index, n, item_base)
87 {}
88};
89
90/*---------------------------------------------------------------------------*/
91/*---------------------------------------------------------------------------*/
92/*!
93 * \brief Enumérateur sur une liste typée d'entités connectées de type \a ItemType
94 */
95template<typename ItemType>
96class ItemConnectedEnumeratorT
97: public ItemConnectedEnumeratorBaseT<ItemType>
98{
99 using BaseClass = ItemConnectedEnumeratorBaseT<ItemType>;
100
101 public:
102
103 ItemConnectedEnumeratorT() = default;
104 template<int E> ItemConnectedEnumeratorT(const ItemConnectedListView<E>& rhs) : BaseClass(rhs){}
105 ItemConnectedEnumeratorT(const ItemConnectedListViewT<ItemType>& rhs) : BaseClass(rhs){}
106
107 private:
108
109 ItemConnectedEnumeratorT(ItemSharedInfo* s,const Int32ConstArrayView& local_ids)
110 : BaseClass(s,local_ids){}
111};
112
113/*---------------------------------------------------------------------------*/
114/*---------------------------------------------------------------------------*/
115
116/*!
117 * \def ENUMERATE_CONNECTED_(type,iterator_name,item,connectivity_func)
118 *
119 * \brief Macro pour itérer sur une liste d'entité connectées à une autre entité.
120 *
121 * \warning API expérimentale. Ne pas utiliser en dehors de %Arcane.
122 *
123 * \param type type de l'entité connectée (Node, Face, Cell, Edge, Particle, DoF )
124 * \param iterator_name nom de l'énumérateur
125 * \param item nom de l'entité dont on souhaite avoir les connectivités
126 * \param connectivity_func méthode de \a item pour récupérer la connectivité.
127 *
128 * Exemple pour itérer sur les noeuds de la mailles:
129 * \code
130 * Arcane::Cell cell = ...;
131 * ENUMERATE_CONNECTED_(Node,inode,cell,nodes()){
132 * Arcane::Node node(*inode);
133 * info() << "Node local_id=" << node.localId()
134 * }
135 * \endcode
136 */
137#ifdef ARCANE_USE_SPECIFIC_ITEMCONNECTED
138
139#define ENUMERATE_CONNECTED_(type,iterator_name,item,connectivity_func) \
140 for( ::Arcane::ItemConnectedEnumeratorT< type > iterator_name( (item) . connectivity_func ); iterator_name . hasNext(); ++iterator_name )
141
142#else
143
144#define ENUMERATE_CONNECTED_(type,iterator_name,item,connectivity_func) \
145 for( ::Arcane::ItemEnumeratorT< type > iterator_name( (item) . connectivity_func ); iterator_name . hasNext(); ++iterator_name )
146
147#endif
148
149/*---------------------------------------------------------------------------*/
150/*---------------------------------------------------------------------------*/
151
152} // End namespace
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156
157#endif
Maille d'un maillage.
Definition Item.h:1191
classe degré de liberté.
Definition Item.h:1503
Arête d'une maille.
Definition Item.h:809
Face d'une maille.
Definition Item.h:944
constexpr Int32 index() const
Indice courant de l'énumérateur.
Vue sur une liste d'entités connectées à une autre.
Vue sur une liste d'entités connectées à une autre entité.
Elément de maillage s'appuyant sur des noeuds (Edge,Face,Cell).
Definition Item.h:724
Classe de base d'un élément de maillage.
Definition Item.h:83
Noeud d'un maillage.
Definition Item.h:573
Particule.
Definition Item.h:1397
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
std::int32_t Int32
Type entier signé sur 32 bits.