Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ItemFunctor.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* ItemFunctor.h (C) 2000-2024 */
9/* */
10/* Fonctor sur les entités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ITEMFUNCTOR_H
13#define ARCANE_ITEMFUNCTOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/RangeFunctor.h"
18#include "arcane/utils/Functor.h"
19
20#include "arcane/core/Item.h"
21#include "arcane/core/ItemVectorView.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane
27{
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
40class ARCANE_CORE_EXPORT AbstractItemRangeFunctor
41: public IRangeFunctor
42{
43 public:
44
45 static const Integer DEFAULT_GRAIN_SIZE = 400;
46
48
49 public:
50
52 Int32 nbBlock() const { return m_nb_block; }
53
55 Int32 blockGrainSize() const { return m_block_grain_size; }
56
57 protected:
58
59 ItemVectorView m_items;
60 Int32 m_block_size = 0;
61 Int32 m_nb_block = 0;
62 Int32 m_block_grain_size = 0;
63
64 protected:
65
66 ItemVectorView _view(Int32 begin_block, Int32 nb_block, Int32* true_begin = nullptr) const;
67
68 private:
69};
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
76template<typename InstanceType,typename ItemType>
79{
80 private:
81
82 typedef void (InstanceType::*FunctionType)(ItemVectorViewT<ItemType>);
83
84 public:
85 ItemRangeFunctorT(ItemVectorView items_view,InstanceType* instance,
86 FunctionType function,Integer grain_size = DEFAULT_GRAIN_SIZE)
87 : AbstractItemRangeFunctor(items_view,grain_size), m_instance(instance),
88 m_function(function)
89 {
90 }
91
92 private:
93
94 InstanceType* m_instance;
95 FunctionType m_function;
96
97 public:
98
99 virtual void executeFunctor(Int32 begin, Int32 size)
100 {
101 //cout << "** BLOCKED RANGE! range=" << range.begin() << " end=" << range.end() << " size=" << range.size() << "\n";
102 //CellVectorView sub_view = m_cells.subView(range.begin(),range.size());
103 ItemVectorViewT<ItemType> sub_view(this->_view(begin,size));
104 //cout << "** SUB_VIEW v=" << sub_view.size();
105 (m_instance->*m_function)(sub_view);
106 }
107};
108
109/*---------------------------------------------------------------------------*/
110/*---------------------------------------------------------------------------*/
116template<typename LambdaType>
119{
120 public:
122 Int32 grain_size = DEFAULT_GRAIN_SIZE)
124 {
125 }
126
127 public:
128
129 void executeFunctor(Int32 begin, Int32 size) override
130 {
131 Int32 true_begin = 0;
132 ItemVectorView sub_view(this->_view(begin, size, &true_begin));
133 // La lambda peut avoir deux prototypes :
134 // - elle prend uniquement un ItemVectorView en argument (version historique)
135 // - elle prend un ItemVectorView et l'indice du début du vecteur. Cela
136 // permet de connaitre l'index de l'itération
137 if constexpr (std::is_invocable_v<LambdaType, ItemVectorView>)
138 m_lambda_function(sub_view);
139 else
140 m_lambda_function(sub_view, true_begin);
141 }
142
143 private:
144
145 const LambdaType& m_lambda_function;
146};
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
154: public IFunctor
155{
156 public:
157
158 ItemGroupComputeFunctor() = default;
159
160 public:
161
162 void setGroup(ItemGroupImpl* group) { m_group = group; }
163
164 protected:
165
166 ItemGroupImpl* m_group = nullptr;
167};
168
169/*---------------------------------------------------------------------------*/
170/*---------------------------------------------------------------------------*/
171
172}
173
174/*---------------------------------------------------------------------------*/
175/*---------------------------------------------------------------------------*/
176
177#endif
178
Classe de base des fonctors sur une liste d'entités.
Definition ItemFunctor.h:42
Int32 nbBlock() const
Nombre de blocs.
Definition ItemFunctor.h:52
Int32 blockGrainSize() const
Taille souhaitée d'un intervalle d'itération.
Definition ItemFunctor.h:55
Interface d'un fonctor sur un interval d'itération.
Fonctor pour le calcul des éléments d'un groupe.
Implémentation d'un groupe d'entités de maillage.
Fonctor pour itérer sur une liste d'entités.
Definition ItemFunctor.h:79
Vue sur un vecteur d'entités.
Fonctor sur un interval d'itération instancié via une lambda fonction.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-