Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemLoop.h
Aller à la documentation de ce fichier.
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/* ItemLoop.h (C) 2000-2018 */
9/* */
10/* Classes utilitaires pour gérer les boucles sur les entités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ITEMLOOP_H
13#define ARCANE_ITEMLOOP_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ItemEnumerator.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
35namespace Loop
36{
42template<typename IterType,typename Lambda> inline void
44{
45 if (view.size()==0)
46 return;
47 bool is_contigous = view.indexes().isContigous();
48 //is_contigous = false;
49 if (is_contigous){
50 Int32 x0 = view.localIds()[0];
51 // Suppose que les itérations sont indépendantes
52 ARCANE_PRAGMA_IVDEP
53 for( Int32 i=0, n=view.size(); i<n; ++i )
54 lambda(IterType(x0+i));
55 }
56 else{
58 lambda(IterType(iitem.localId()));
59 }
60 }
61}
65template<typename ItemType>
67{
68 public:
69 typedef typename ItemType::Index IterType;
73 private:
75 : m_items(items){}
76 public:
77 static ThatClass create(const ItemGroupType& items)
78 { return ThatClass(items.view()); }
79 static ThatClass create(VectorViewType items)
80 { return ThatClass(items); }
81 public:
82 template<typename Lambda>
84 {
86 }
87 private:
88 ItemVectorView m_items;
89};
90
93
94} // End of namespace Loop
95
96} // End of namespace Arcane
97
98/*---------------------------------------------------------------------------*/
99/*---------------------------------------------------------------------------*/
131#define ENUMERATE_ITEM_LAMBDA(item_type,iter,container) \
132 Arcane::Loop:: ItemLoopFunctor ## item_type :: create ( (container) ) << [=]( Arcane::Loop:: ItemLoopFunctor ## item_type :: IterType iter)
133
134/*---------------------------------------------------------------------------*/
135/*---------------------------------------------------------------------------*/
136
137/*---------------------------------------------------------------------------*/
138/*---------------------------------------------------------------------------*/
139
140#endif
#define ENUMERATE_ITEM(name, group)
Enumérateur générique d'un groupe de noeuds.
ItemVectorView view() const
Vue sur les entités du groupe.
Definition ItemGroup.cc:582
bool isContigous() const
Vrai si les localIds() sont contigüs.
Vue sur un tableau typé d'entités.
Vue sur un vecteur d'entités.
Int32 size() const
Nombre d'éléments du vecteur.
ItemIndexArrayView indexes() const
Vue sur le tableau des indices.
Int32ConstArrayView localIds() const
Tableau des numéros locaux des entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Classe template pour encapsuler une boucle sur les entités.
Definition ItemLoop.h:67
void _InternalSimpleItemLoop(ItemVectorView view, const Lambda &lambda)
Fonctor de boucle d'entité permettant de supprimer les indirections si les indices locaux de view son...
Definition ItemLoop.h:43
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-