Arcane  v3.16.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemArrayEnumerator.h
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/* ItemArrayEnumerator.h (C) 2000-2025 */
9/* */
10/* Énumérateur sur un tableau d'entités du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_ITEMARRAYENUMERATOR_H
13#define ARCANE_CORE_ITEMARRAYENUMERATOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/Item.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \brief Énumérateur sur un tableau d'entités du maillage.
29 */
30class ARCANE_CORE_EXPORT ItemArrayEnumerator
31{
32 public:
33
34 typedef ItemInternal* ItemPtr;
35 typedef ItemPtr* Iterator;
36
37 public:
38
39 ItemArrayEnumerator(const Int32ConstArrayView ids, const ItemInternalList& items_internal)
40 : m_current(0)
41 , m_end(ids.size())
42 , m_items_local_id(ids.data())
43 , m_items_internal(items_internal.data())
44 {
45 }
46 ItemArrayEnumerator(const Int32* ids, Integer nb_item, const ItemPtr* items_internal)
47 : m_current(0)
48 , m_end(nb_item)
49 , m_items_local_id(ids)
50 , m_items_internal(items_internal)
51 {
52 }
53
54 public:
55
56 inline void operator++()
57 {
58 ++m_current;
59 }
60 inline bool hasNext() const
61 {
62 return m_current < m_end;
63 }
64 inline Integer itemLocalId() const
65 {
66 return m_items_local_id[m_current];
67 }
68 inline Integer index() const
69 {
70 return m_current;
71 }
72 inline Item operator*() const
73 {
74 return Item(m_items_internal, m_items_local_id[m_current]);
75 }
76
77 protected:
78
79 Integer m_current;
80 Integer m_end;
81 const Int32* ARCANE_RESTRICT m_items_local_id;
82 const ItemPtr* m_items_internal;
83};
84
85/*---------------------------------------------------------------------------*/
86/*---------------------------------------------------------------------------*/
87/*!
88 * \brief Énumérateur sur un tableau d'entités du maillage de genre \a ItemType.
89 */
90template <typename ItemType>
91class ItemArrayEnumeratorT
92: public ItemArrayEnumerator
93{
94 public:
95
96 ItemArrayEnumeratorT(const Int32ConstArrayView ids, const ItemInternalList& items_internal)
97 : ItemArrayEnumerator(ids, items_internal)
98 {
99 }
100 ItemArrayEnumeratorT(const Int32* ids, Integer nb_item, const ItemPtr* items_internal)
101 : ItemArrayEnumerator(ids, nb_item, items_internal)
102 {
103 }
104 inline ItemType operator*() const
105 {
106 return ItemType(m_items_internal, m_items_local_id[m_current]);
107 }
108};
109
110/*---------------------------------------------------------------------------*/
111/*---------------------------------------------------------------------------*/
112
113} // namespace Arcane
114
115/*---------------------------------------------------------------------------*/
116/*---------------------------------------------------------------------------*/
117
118#endif
constexpr const_pointer data() const noexcept
Pointeur sur la mémoire allouée.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Classe de base d'un élément de maillage.
Definition Item.h:83
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
ConstArrayView< ItemInternal * > ItemInternalList
Type de la liste interne des entités.
Definition ItemTypes.h:466
std::int32_t Int32
Type entier signé sur 32 bits.