Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MeshUtils.h
Aller à la documentation de ce fichier.
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* MeshUtils.h (C) 2000-2025 */
9/* */
10/* Fonctions utilitaires diverses sur le maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MESHUTILS_H
13#define ARCANE_CORE_MESHUTILS_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/FunctorUtils.h"
19
20#include "arcane/Item.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24/*!
25 * \file MeshUtils.h
26 *
27 * \brief Fonctions utilitaires sur le maillage.
28 */
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane
33{
34class XmlNode;
36} // namespace Arcane
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40
41namespace Arcane::MeshUtils
42{
43extern "C++" ARCANE_CORE_EXPORT void
44writeMeshItemInfo(ISubDomain*, Cell cell, bool depend_info = true);
45extern "C++" ARCANE_CORE_EXPORT void
46writeMeshItemInfo(ISubDomain*, Node node, bool depend_info = true);
47extern "C++" ARCANE_CORE_EXPORT void
48writeMeshItemInfo(ISubDomain*, Edge edge, bool depend_info = true);
49extern "C++" ARCANE_CORE_EXPORT void
50writeMeshItemInfo(ISubDomain*, Face face, bool depend_info = true);
51
52/*---------------------------------------------------------------------------*/
53/*---------------------------------------------------------------------------*/
54/*!
55 * \brief Réordonne les noeuds d'une face.
56
57 Cette méthode réordonne la liste des noeuds d'une face pour que les
58 propritétés suivantes soient respectées:
59 - le premier noeud de la face est celui dont le numéro global est le plus petit.
60 - le deuxième noeud de la face est celui dont le numéro global est le deuxième plus petit.
61
62 Cela permet:
63 - d'orienter les faces de manière identiques en parallèle.
64 - d'accélerer les recherches sur les recherches entre faces.
65
66 \a before_ids et \a to doivent avoir le même nombre d'éléments
67
68 \param before_ids numéros globaux des noeuds de la face avant renumérotation.
69 \param after_ids en sortie, numéros globaux des noeuds de la face après renumérotation
70
71 \retval true si la face change d'orientation lors de la renumérotation
72 \retval false sinon.
73*/
74extern "C++" ARCANE_CORE_EXPORT bool
76
77/*---------------------------------------------------------------------------*/
78/*---------------------------------------------------------------------------*/
79/*!
80 * \brief Réordonne les noeuds d'une face.
81
82 Cette méthode réordonne la liste des noeuds d'une face pour que les
83 propriétés suivantes soient respectées:
84 - le premier noeud de la face est celui dont le numéro global est le plus petit.
85 - le deuxième noeud de la face est celui dont le numéro global est le deuxième plus petit.
86
87 Cela permet:
88 - d'orienter les faces de manière identiques en parallèle.
89 - d'accélerer les recherches sur les recherches entre faces.
90
91 \a nodes_unique_id et \a new_index doivent avoir le même nombre d'éléments
92
93 \param nodes_unique_id numéros uniques des noeuds de la face.
94 \param new_index en sortie, position des numéros des noeuds après réorientation.
95
96 Par exemple, si une face possède les 4 noeuds de numéros uniques 7 3 2 5,
97 la réorientation donnera le quadruplet (2 3 7 5), soit le tableau d'index
98 suivant (2,1,0,3).
99
100 \retval true si la face change d'orientation lors de la renumérotation
101 \retval false sinon.
102*/
103extern "C++" ARCANE_CORE_EXPORT bool
105
106/*---------------------------------------------------------------------------*/
107/*---------------------------------------------------------------------------*/
108/*!
109 * \brief Recherche une entité face à partir des numéros locaux de ces noeuds.
110 *
111 * Recherche la face donnée par la liste ordonnée des numéros <b>locaux</b> de
112 * ces noeuds \a face_nodes_local_id. \a node doit être le premier noeud de
113 * la face. Les noeuds de la face doivent être correctement orientés, comme
114 * après un appel à reorderNodesOfFace().
115 *
116 * \return la face correspondante ou la face nulle si elle n'est pas trouvé.
117 */
118extern "C++" ARCANE_CORE_EXPORT Face
119getFaceFromNodesLocalId(Node node, Int32ConstArrayView face_nodes_local_id);
120
121ARCANE_DEPRECATED_REASON("Y2025: Use getFaceFromNodesLocalId() instead")
122inline Face
123getFaceFromNodesLocal(Node node, Int32ConstArrayView face_nodes_local_id)
124{
125 return getFaceFromNodesLocalId(node, face_nodes_local_id);
126}
127
128/*---------------------------------------------------------------------------*/
129/*---------------------------------------------------------------------------*/
130/*!
131 * \brief Recherche une entité face à partir des numéros uniques de ces noeuds.
132 *
133 * Recherche la face donnée par la liste ordonnée des numéros <b>unique</b> de
134 * ces noeuds \a face_nodes_unique_id. \a node doit être le premier noeud de
135 * la face. Les noeuds de la face doivent être correctement orientés, comme
136 * après un appel à reorderNodesOfFace().
137 *
138 * \return la face correspondante ou la face nulle si elles n'est pas trouvé.
139 */
140extern "C++" ARCANE_CORE_EXPORT Face
141getFaceFromNodesUniqueId(Node node, Int64ConstArrayView face_nodes_unique_id);
142
143ARCANE_DEPRECATED_REASON("Y2025: Use getFaceFromNodesUniqueId() instead")
144inline Face
145getFaceFromNodesUnique(Node node, Int64ConstArrayView face_nodes_unique_id)
146{
147 return getFaceFromNodesUniqueId(node, face_nodes_unique_id);
148}
149
150/*---------------------------------------------------------------------------*/
151/*---------------------------------------------------------------------------*/
152/*!
153 * \brief Génère un identifiant unique à partir d'une liste d'identifiants de noeuds.
154 */
155extern "C++" ARCANE_CORE_EXPORT Int64
156generateHashUniqueId(SmallSpan<const Int64> nodes_unique_id);
157
158/*---------------------------------------------------------------------------*/
159/*---------------------------------------------------------------------------*/
160
161/*!
162 * \brief Supprime une entité en conservant l'ordre.
163 *
164 * Supprime l'entité de numéro local \a local_id de la liste \a items.
165 * Les entités situées après l'entité supprimée sont décalées pour remplir le trou.
166 * Si aucune valeur de \a items ne vaut \a local_id, une exception est levée.
167 */
168extern "C++" ARCANE_CORE_EXPORT void
170
171/*---------------------------------------------------------------------------*/
172/*---------------------------------------------------------------------------*/
173/*!
174 * \brief Vérifie que le maillage possède certaines propriétés.
175 *
176 * Si \a is_sorted, vérifie que les entités de maillage sont triées par
177 * ordre croissant de leur uniqueId().
178 * Si \a has_no_hole est vrai, vérifie que si le maillage possède \a n
179 * entité d'un type, leur numéro local varie bien de \a 0 à \a n-1.
180 * Si \a check_faces est vrai, on vérifie pour les faces. Cette option
181 * n'est utilisable que pour les maillages ancienne génération (MeshV1) et
182 * sera supprimée dès que cette option ne sera plus utilisée.
183 */
184extern "C++" ARCANE_CORE_EXPORT void
185checkMeshProperties(IMesh* mesh, bool is_sorted, bool has_no_hole, bool check_faces);
186
187/*!
188 * \brief Ecrit sur le fichier \a file_name les infos du maillage \a mesh
189 *
190 * Les identifiants des entités sont triés pour que le maillage soit
191 * identique quel que soit la numérotation initiale.
192 */
193extern "C++" ARCANE_CORE_EXPORT void
194writeMeshInfosSorted(IMesh* mesh, const String& file_name);
195
196extern "C++" ARCANE_CORE_EXPORT void
197writeMeshInfos(IMesh* mesh, const String& file_name);
198
199/*!
200 * \brief Ecrit sur le fichier \a file_name la connectivité du maillage \a mesh
201 *
202 * La connectivité de chaque entité arête, face et maille est sauvée.
203 */
204extern "C++" ARCANE_CORE_EXPORT void
205writeMeshConnectivity(IMesh* mesh, const String& file_name);
206
207extern "C++" ARCANE_CORE_EXPORT void
208checkMeshConnectivity(IMesh* mesh, const XmlNode& root_node, bool check_sub_domain);
209
210extern "C++" ARCANE_CORE_EXPORT void
211checkMeshConnectivity(IMesh* mesh, const String& file_name, bool check_sub_domain);
212
213/*!
214 * \brief Ecrit dans le flux \a ostr la description des items du groupe \a item_group
215 *
216 * Pour l'affichage, un nom \a name est associé.
217 */
218extern "C++" ARCANE_CORE_EXPORT void
219printItems(std::ostream& ostr, const String& name, ItemGroup item_group);
220
221/*!
222 * \brief Affiche l'utilisation mémoire des groupes du maillage.
223 *
224 * Si \a print_level vaut 0, affiche uniquement l'usage mémoire total.
225 * So \a print_level vaut 1 ou plus, affiche l'usage pour chaque groupe.
226 *
227 * En retour, indique la mémoire consommée en octets.
228 */
229extern "C++" ARCANE_CORE_EXPORT Int64
230printMeshGroupsMemoryUsage(IMesh* mesh, Int32 print_level);
231
232//! Limite au plus juste l'usage mémoire des groupes.
233extern "C++" ARCANE_CORE_EXPORT void
234shrinkMeshGroups(IMesh* mesh);
235
236/*!
237 * \brief Ecrit dans un fichier les informations sur la topologie d'une synchronisation
238 *
239 * Ecrit dans le fichier \a filename les informations sur la topologie de \a var_syncer.
240 * Cette méthode est collective. Seul le rang 0 écrit l'information de la topologie.
241 */
242extern "C++" ARCANE_CORE_EXPORT void
243dumpSynchronizerTopologyJSON(IVariableSynchronizer* var_syncer, const String& filename);
244
245/*!
246 * \internal
247 * \brief Calcul et affiche les patterns communs dans les connectivités.
248 */
249extern "C++" ARCANE_CORE_EXPORT void
250computeConnectivityPatternOccurence(IMesh* mesh);
251
252/*---------------------------------------------------------------------------*/
253/*---------------------------------------------------------------------------*/
254/*!
255 * \brief Indique que les connectivités du maillages ne seront
256 * pas régulièrement modifiées.
257 *
258 * Cette fonction permet d'indiquer que les connectivitées associées aux
259 * entités du maillage (Node, Edge, Face et Cell) sont la plupart du temps
260 * en lecture. A noter que cela ne concerne pas les particules.
261 *
262 * En cas d'utilisation sur accélérateur, cela permet de dupliquer les
263 * informations entre l'accélérateur et l'hôte pour éviter des aller-retour
264 * multiples si les connectivités sont utilisées sur les deux à la fois.
265 *
266 * Si \a q est non nul et que \a do_prefetch vaut \a true, alors
267 * VariableUtils::prefetchVariableAsync() est appelé pour chaque variable
268 * gérant la connectivité.
269 */
270extern "C++" ARCANE_CORE_EXPORT void
271markMeshConnectivitiesAsMostlyReadOnly(IMesh* mesh, RunQueue* q = nullptr,
272 bool do_prefetch = false);
273
274/*---------------------------------------------------------------------------*/
275/*---------------------------------------------------------------------------*/
276/*
277 * \brief Retourne l'entité de la famille \a family de numéro unique \a unique_id.
278 *
279 * Si aucune entité avec cet \a unique_id n'est trouvé, retourne l'entité nulle.
280 *
281 * \pre family->hasUniqueIdMap() == true
282 */
283extern "C++" ARCANE_CORE_EXPORT ItemBase
284findOneItem(IItemFamily* family, Int64 unique_id);
285
286/*---------------------------------------------------------------------------*/
287/*---------------------------------------------------------------------------*/
288/*
289 * \brief Retourne l'entité de la famille \a family de numéro unique \a unique_id.
290 *
291 * Si aucune entité avec cet \a unique_id n'est trouvé, retourne l'entité nulle.
292 *
293 * \pre family->hasUniqueIdMap() == true
294 */
295extern "C++" ARCANE_CORE_EXPORT ItemBase
296findOneItem(IItemFamily* family, ItemUniqueId unique_id);
297
298/*---------------------------------------------------------------------------*/
299/*---------------------------------------------------------------------------*/
300/*!
301 * \brief Visite l'ensemble des groupes de \a family avec le functor \a functor.
302 */
303extern "C++" ARCANE_CORE_EXPORT void
304visitGroups(IItemFamily* family, IFunctorWithArgumentT<ItemGroup&>* functor);
305
306/*---------------------------------------------------------------------------*/
307/*---------------------------------------------------------------------------*/
308/*!
309 * \brief Visite l'ensemble des groupes de \a mesh avec le functor \a functor.
310 */
311extern "C++" ARCANE_CORE_EXPORT void
312visitGroups(IMesh* mesh, IFunctorWithArgumentT<ItemGroup&>* functor);
313
314/*---------------------------------------------------------------------------*/
315/*---------------------------------------------------------------------------*/
316/*!
317 * \brief Visite l'ensemble des groupes de \a family avec la lambda \a f.
318 *
319 * Cette fonction permet d'appliquer un visiteur pour l'ensemble des
320 * groupes de la famille \a family.
321 *
322 * Par exemple:
323 *
324 * \code
325 * IMesh* mesh = ...;
326 * auto xx = [](const ItemGroup& x) { std::cout << "name=" << x.name(); };
327 * MeshUtils::visitGroups(mesh,xx);
328 * \endcode
329 */
330template <typename LambdaType> inline void
331visitGroups(IItemFamily* family, const LambdaType& f)
332{
334 // Il faut caster en le bon type pour que le compilateur utilise la bonne surcharge.
336 visitGroups(family, sf_addr);
337}
338
339/*---------------------------------------------------------------------------*/
340/*---------------------------------------------------------------------------*/
341/*!
342 * \brief Visite l'ensemble des groupes de \a mesh avec la lambda \a f.
343 *
344 * Cette fonction permet d'appliquer un visiteur pour l'ensemble des
345 * groupes de l'ensemble des familles du maillage \a mesh
346 *
347 * Elle s'utilise comme suit:
348 *
349 * \code
350 * IMesh* mesh = ...;
351 * auto xx = [](const ItemGroup& x) { std::cout << "name=" << x.name(); };
352 * MeshVisitor::visitGroups(mesh,xx);
353 * \endcode
354 */
355template <typename LambdaType> inline void
356visitGroups(IMesh* mesh, const LambdaType& f)
357{
359 // Il faut caster en le bon pour que le compilateur utilise la bonne surcharge.
361 visitGroups(mesh, sf_addr);
362}
363
364namespace impl
365{
366 inline Int64 computeCapacity(Int64 size)
367 {
369 }
370} // namespace impl
371
372/*---------------------------------------------------------------------------*/
373/*---------------------------------------------------------------------------*/
374/*!
375 * \brief Redimensionne un tableau qui est indexé par des 'ItemLocalId'.
376 *
377 * Le tableau \a array est redimensionné uniquement si \a new_size est
378 * supérieure à la taille actuelle du tableau ou si \a force_resize est vrai.
379 *
380 * Si le tableau est redimensionné, on réserve une capacité supplémentaire
381 * pour éviter de réallouer à chaque fois.
382 *
383 * Cette fonction est appelée en général pour les tableaux indexés par un
384 * ItemLocalId et donc cette fonction peut être appelée à chaque fois qu'on
385 * ajoute une entité au maillage.
386 *
387 * \retval true si un redimensionnement a eu lieu
388 * \retval false sinon
389 */
390template <typename DataType> inline bool
391checkResizeArray(Array<DataType>& array, Int64 new_size, bool force_resize)
392{
393 return Arcane::MemoryUtils::checkResizeArrayWithCapacity(array, new_size, force_resize);
394}
395
396/*---------------------------------------------------------------------------*/
397/*---------------------------------------------------------------------------*/
398/*!
399 * \brief Retourne le maximum des uniqueId() des entités standards du maillage.
400 *
401 * Les entités standards sont les noeuds, mailles, faces et arêtes.
402 * L'opération est collective sur mesh->parallelMng().
403 */
404extern "C++" ARCANE_CORE_EXPORT ItemUniqueId
405getMaxItemUniqueIdCollective(IMesh* mesh);
406
407/*---------------------------------------------------------------------------*/
408/*---------------------------------------------------------------------------*/
409/*!
410 * \brief Vérifie le hash des uniqueId() des entités d'une famille.
411 *
412 * Calcule via l'algo \a hash_algo un hash des uniqueId() des entités
413 * d'une famille. Pour ce calcul, le rang 0 récupère l'ensemble des uniqueId()
414 * des entités propres de chaque sous-domaine, les trie et calcul le hash
415 * sur le tableau trié.
416 *
417 * Comme la majorité du travail est effectuée par le rang 0, cette méthode
418 * n'est pas très extensible et ne doit donc être utilisée qu'à des fins
419 * de test.
420 *
421 * \a expected_hash est la valeur attendue du hash sous forme de caractères
422 * hexadécimaux (obtenu via Convert::toHexaString()). Si \a expected_hash
423 * est non nul, compare le résultat avec cette valeur et si elle est différente,
424 * lance une exception FatalErrorException.
425 *
426 * Cette opération est collective.
427 */
428extern "C++" ARCANE_CORE_EXPORT void
429checkUniqueIdsHashCollective(IItemFamily* family, IHashAlgorithm* hash_algo,
430 const String& expected_hash, bool print_hash_value,
431 bool include_ghost);
432
433/*---------------------------------------------------------------------------*/
434/*---------------------------------------------------------------------------*/
435/*!
436 * \brief Rempli \a uids avec les uniqueId() des entités de \a view.
437 */
438extern "C++" ARCANE_CORE_EXPORT void
439fillUniqueIds(ItemVectorView items,Array<Int64>& uids);
440
441/*---------------------------------------------------------------------------*/
442/*---------------------------------------------------------------------------*/
443
444/*!
445 * \brief Créé ou recréé une connectivité noeuds-noeuds via les arêtes.
446 *
447 * La connectivité aura pour nom \a connectivity_name.
448 */
449extern "C++" ARCANE_CORE_EXPORT Ref<IIndexedIncrementalItemConnectivity>
450computeNodeNodeViaEdgeConnectivity(IMesh* mesh, const String& connectivity_name);
451
452/*---------------------------------------------------------------------------*/
453/*---------------------------------------------------------------------------*/
454
455} // namespace Arcane::MeshUtils
456
457/*---------------------------------------------------------------------------*/
458/*---------------------------------------------------------------------------*/
459
460namespace Arcane::mesh_utils
461{
462// Using pour compatibilité avec l'existant.
463// Ces using ont été ajoutés pour la version 3.10 de Arcane (juin 2023).
464// On pourra les rendre obsolètes début 2024.
465using MeshUtils::checkMeshConnectivity;
466using MeshUtils::checkMeshProperties;
467using MeshUtils::computeConnectivityPatternOccurence;
468using MeshUtils::dumpSynchronizerTopologyJSON;
469using MeshUtils::getFaceFromNodesLocal;
470using MeshUtils::getFaceFromNodesUnique;
471using MeshUtils::printItems;
472using MeshUtils::printMeshGroupsMemoryUsage;
473using MeshUtils::removeItemAndKeepOrder;
474using MeshUtils::reorderNodesOfFace;
475using MeshUtils::reorderNodesOfFace2;
476using MeshUtils::shrinkMeshGroups;
477using MeshUtils::writeMeshConnectivity;
478using MeshUtils::writeMeshInfos;
479using MeshUtils::writeMeshInfosSorted;
480using MeshUtils::writeMeshItemInfo;
481
482/*---------------------------------------------------------------------------*/
483/*---------------------------------------------------------------------------*/
484
485} // namespace Arcane::mesh_utils
486
487/*---------------------------------------------------------------------------*/
488/*---------------------------------------------------------------------------*/
489
490#endif
Fonctions de gestion mémoire et des allocateurs.
Int64 computeCapacity(Int64 size)
Calcule une capacité adaptée pour une taille de size.
void shrinkMeshGroups(IMesh *mesh)
Limite au plus juste l'usage mémoire des groupes.
void dumpSynchronizerTopologyJSON(IVariableSynchronizer *var_syncer, const String &filename)
Ecrit dans un fichier les informations sur la topologie d'une synchronisation.
bool checkResizeArray(Array< DataType > &array, Int64 new_size, bool force_resize)
Redimensionne un tableau qui est indexé par des 'ItemLocalId'.
Definition MeshUtils.h:391
void writeMeshInfosSorted(IMesh *mesh, const String &file_name)
Ecrit sur le fichier file_name les infos du maillage mesh.
Definition MeshUtils.cc:522
void writeMeshConnectivity(IMesh *mesh, const String &file_name)
Ecrit sur le fichier file_name la connectivité du maillage mesh.
Definition MeshUtils.cc:828
void printItems(std::ostream &ostr, const String &name, ItemGroup item_group)
Ecrit dans le flux ostr la description des items du groupe item_group.
bool reorderNodesOfFace(Int64ConstArrayView before_ids, Int64ArrayView after_ids)
Réordonne les noeuds d'une face.
Int64 generateHashUniqueId(SmallSpan< const Int64 > nodes_unique_id)
Génère un identifiant unique à partir d'une liste d'identifiants de noeuds.
Int64 printMeshGroupsMemoryUsage(IMesh *mesh, Int32 print_level)
Affiche l'utilisation mémoire des groupes du maillage.
void visitGroups(IItemFamily *family, IFunctorWithArgumentT< ItemGroup & > *functor)
Visite l'ensemble des groupes de family avec le functor functor.
void removeItemAndKeepOrder(Int32ArrayView items, Int32 local_id)
Supprime une entité en conservant l'ordre.
void checkMeshProperties(IMesh *mesh, bool is_sorted, bool has_no_hole, bool check_faces)
Vérifie que le maillage possède certaines propriétés.
Face getFaceFromNodesUniqueId(Node node, Int64ConstArrayView face_nodes_unique_id)
Recherche une entité face à partir des numéros uniques de ces noeuds.
void markMeshConnectivitiesAsMostlyReadOnly(IMesh *mesh, RunQueue *q=nullptr, bool do_prefetch=false)
Indique que les connectivités du maillages ne seront pas régulièrement modifiées.
bool reorderNodesOfFace2(Int64ConstArrayView nodes_unique_id, IntegerArrayView new_index)
Réordonne les noeuds d'une face.
Face getFaceFromNodesLocalId(Node node, Int32ConstArrayView face_nodes_local_id)
Recherche une entité face à partir des numéros locaux de ces noeuds.
Classe de base des vecteurs 1D de données.
Interface d'un fonctor avec argument mais sans valeur de retour.
Interface d'un algorithme de hashage.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
Interface d'un service de synchronisation de variable.
Identifiant unique d'une entité.
Vue sur un vecteur d'entités.
Référence à une instance.
Chaîne de caractères unicode.
Noeud d'un arbre DOM.
Definition XmlNode.h:51
Int32 checkResizeArrayWithCapacity(Array< DataType > &array, Int64 new_size, bool force_resize)
Redimensionne un tableau en ajoutant une réserve de mémoire.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ArrayView< Int64 > Int64ArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:538
std::int64_t Int64
Type entier signé sur 64 bits.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
ArrayView< Integer > IntegerArrayView
Equivalent C d'un tableau à une dimension d'entiers.
Definition UtilsTypes.h:544
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:567
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:540
std::int32_t Int32
Type entier signé sur 32 bits.