Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemConnectivityContainerView.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* ItemConnectivityContainerView.h (C) 2000-2023 */
9/* */
10/* Vues sur les conteneurs contenant les connectivités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ITEMCONNECTIVITYCONTAINERVIEW_H
13#define ARCANE_ITEMCONNECTIVITYCONTAINERVIEW_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arccore/base/Span.h"
18
19#include "arcane/ArcaneTypes.h"
20#include "arcane/ItemTypes.h"
21#include "arcane/ItemLocalId.h"
22
23/*---------------------------------------------------------------------------*/
24/*---------------------------------------------------------------------------*/
25
26namespace Arcane::mesh
27{
28class IncrementalItemConnectivityBase;
29}
30
31namespace Arcane
32{
33class ItemInternalConnectivityList;
34
35/*---------------------------------------------------------------------------*/
36/*---------------------------------------------------------------------------*/
37/*!
38 * \internal
39 * \brief Vues sur les conteneurs contenant les connectivités.
40 * Cette classe permet de rendre opaque en dehors d'Arcane les conteneurs utilisés
41 * pour faciliter leur changement éventuel.
42 */
43class ARCANE_CORE_EXPORT ItemConnectivityContainerView
44{
45 // Liste des classes qui ont le droit de créer ou de récupérer directement
46 // des instances de cette classe
50 friend mesh::IncrementalItemConnectivityBase;
51 template <typename ItemType1, typename ItemType2>
53
54 private:
55
59 SmallSpan<const Int32> _nb_connected_item)
60 : m_list_data(_list.data())
61 , m_indexes(_indexes.data())
62 , m_nb_connected_items(_nb_connected_item.data())
63 , m_list_data_size(_list.size())
64 , m_nb_item(_nb_connected_item.size())
65 {
66#ifdef ARCANE_CHECK
67 _checkSize( _indexes.size(), _nb_connected_item.size());
68#endif
69 }
70
71 public:
72
73 /*!
74 * \brief Vérifie que les deux instances \a this et \a rhs ont les mêmes valeurs.
75 *
76 * Lance un FatalErrorException si ce n'est pas le cas.
77 */
78 void checkSame(ItemConnectivityContainerView rhs) const;
79
80 private:
81
82 //! Liste des entités connectées à l'entité de localId() \a lid
83 template <typename ItemType> constexpr ARCCORE_HOST_DEVICE
85 itemsIds(ItemLocalId lid) const
86 {
87 ARCANE_CHECK_AT(lid.localId(), m_nb_item);
88 Int32 x = m_indexes[lid];
89 ARCANE_CHECK_AT(x, m_list_data_size);
90 auto* p = &m_list_data[x];
91 // TODO: LOCAL_ID_OFFSET
92 return { p, m_nb_connected_items[lid], 0 };
93 }
94
95 //! \a index-ème entité connectée à l'entité de localId() \a lid
96 template <typename ItemLocalIdType> constexpr ARCCORE_HOST_DEVICE
97 ItemLocalIdType
98 itemId(ItemLocalId lid, Int32 index) const
99 {
100 ARCANE_CHECK_AT(lid.localId(), m_nb_item);
101 Int32 x = m_indexes[lid] + index;
102 ARCANE_CHECK_AT(x, m_list_data_size);
103 return ItemLocalIdType(m_list_data[x]);
104 }
105
106 //! Tableau des indices dans la table de connectivités
107 constexpr ARCCORE_HOST_DEVICE SmallSpan<const Int32>
108 indexes() const { return { m_indexes, m_nb_item }; }
109
110 //! Tableau du nombre d'entités connectées à une autre entité.
111 constexpr ARCCORE_HOST_DEVICE SmallSpan<const Int32>
112 nbConnectedItems() const { return { m_nb_connected_items,m_nb_item }; }
113
114 //! Nombre d'entités
115 constexpr ARCCORE_HOST_DEVICE Int32 nbItem() const { return m_nb_item; }
116
117 private:
118
119 const Int32* m_list_data = nullptr;
120 const Int32* m_indexes = nullptr;
121 const Int32* m_nb_connected_items = nullptr;
122 Int32 m_list_data_size = 0;
123 Int32 m_nb_item = 0;
124
125 private:
126
127 void _checkSize(Int32 indexes_size, Int32 nb_connected_item_size);
128};
129
130/*---------------------------------------------------------------------------*/
131/*---------------------------------------------------------------------------*/
132
133} // End namespace Arcane
134
135/*---------------------------------------------------------------------------*/
136/*---------------------------------------------------------------------------*/
137
138#endif
Vue spécialisée sur une connectivité non structurée entre deux entités.
Classe de base d'une vue sur une connectivité non structurée.
Classe de base d'une vue sur une connectivité non structurée.
Vue typée sur une liste d'entités d'une connectivité.
Index d'un Item dans une variable.
Definition ItemLocalId.h:40
Vue d'un tableau d'éléments de type T.
Definition Span.h:670
constexpr __host__ __device__ SizeType size() const noexcept
Retourne la taille du tableau.
Definition Span.h:209
constexpr __host__ __device__ pointer data() const noexcept
Pointeur sur le début de la vue.
Definition Span.h:419
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-