Arcane  v3.16.6.0
Documentation développeur
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/*---------------------------------------------------------------------------*/
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/*---------------------------------------------------------------------------*/
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.
Structure interne d'une entité de maillage.
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.