Arcane  v3.16.0.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
43_InternalSimpleItemLoop(ItemVectorView view,const Lambda& lambda)
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{
57 ENUMERATE_ITEM(iitem,view){
58 lambda(IterType(iitem.localId()));
59 }
60 }
61}
62
65template<typename ItemType>
66class ItemLoopFunctor
67{
68 public:
69 typedef typename ItemType::Index IterType;
70 typedef ItemVectorViewT<ItemType> VectorViewType;
71 typedef ItemGroupT<ItemType> ItemGroupType;
72 typedef ItemLoopFunctor<ItemType> ThatClass;
73 private:
74 ItemLoopFunctor(ItemVectorView items)
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>
83 void operator<<(Lambda&& lambda)
84 {
86 }
87 private:
88 ItemVectorView m_items;
89};
90
91typedef ItemLoopFunctor<Cell> ItemLoopFunctorCell;
92typedef ItemLoopFunctor<Node> ItemLoopFunctorNode;
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.
Référence à un groupe d'un genre donné.
Definition ItemGroup.h:398
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.
Classe template pour encapsuler une boucle sur les entités.
Definition ItemLoop.h:67
Espace de nom contenant les différentes classes gérant les boucles sur les entités.
Definition ItemLoop.h:36
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 -*-
std::int32_t Int32
Type entier signé sur 32 bits.