Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ConnectivityItemVector.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/* ConnectivityItemVector.h (C) 2000-2016 */
9/* */
10/* Interface des accesseurs des connectivité des entités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CONNECTIVITYITEMVECTOR_H
13#define ARCANE_CONNECTIVITYITEMVECTOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ArrayView.h"
18#include "arcane/utils/String.h"
19
20#include "arcane/ItemTypes.h"
21
22#include "arcane/ItemVector.h"
23#include "arcane/IItemConnectivity.h"
24#include "arcane/IIncrementalItemConnectivity.h"
25
26#include <functional>
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31ARCANE_BEGIN_NAMESPACE
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36class ConnectivityItemVector;
37class IItemConnectivity;
38
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
41/*!
42 * \brief Type temporaire automatiquement casté en ConnectivityItemVector
43 */
45 {
46 std::function<void(ConnectivityItemVector&)> set;
47 std::function<void(ConnectivityItemVector&)> apply; // When C++14 available, use a template type (will avoid std::function object and allow more genericity).
48 };
49
50
51/*---------------------------------------------------------------------------*/
52/*---------------------------------------------------------------------------*/
53/*!
54 * \brief Gère la récupération des informations de connectivité.
55 *
56 * \sa IItemConnectivity
57 * \sa IIncrementalItemConnectivity
58 * \sa IItemConnectivityAccessor.
59 */
60class ARCANE_CORE_EXPORT ConnectivityItemVector
61: public ItemVector
62 // SDC new API : user handles directly the ConnectivityItemVector and iterates on it...need a public inheritance.
63 // the Use of views as in first version is confusing for user that doesn't understand where the view comes from and easily invalidates it...
64{
65public:
66
68 : ItemVector(c->targetFamily()), m_connectivity_accessor(c)
69 {
70 c->_initializeStorage(this);
71 }
73 : ItemVector(c.targetFamily()), m_connectivity_accessor(&c)
74 {
75 c._initializeStorage(this);
76 }
78 : ItemVector(c->targetFamily()), m_connectivity_accessor(c)
79 {
80 c->_initializeStorage(this);
81 }
83 : ItemVector(c.targetFamily()), m_connectivity_accessor(&c)
84 {
85 c._initializeStorage(this);
86 }
88 : ItemVector(), m_connectivity_accessor(nullptr)
89 {
90 to_c.set(*this);
91 to_c.apply(*this);
92 }
93
94 public:
95
96 //! Connectivité associée
98 {
99 return m_connectivity_accessor;
100 }
101
102 //! Retourne les entités connectées à \a item.
104 {
105 return m_connectivity_accessor->_connectedItems(item,*this);
106 }
107
108 public:
109
110 /*!
111 * \internal
112 * \brief Positionne la liste de connectivité avec les entités
113 * spécifiées par \a ids.
114 */
115 ItemVectorView resizeAndCopy(Int32ConstArrayView ids)
116 {
117 this->resize(ids.size());
118 this->viewAsArray().copy(ids);
119 return (*this);
120 }
121
122 /*!
123 * \internal
124 * \brief Positionne la liste de connectivité avec l'entité
125 * de localId() \a id.
126 */
127 ItemVectorView setItem(Int32 id)
128 {
129 this->resize(1);
130 this->viewAsArray()[0] = id;
131 return (*this);
132 }
133
134 /*!
135 * \internal
136 * \brief Permet de récupérer le ConnectivityItemVector
137 */
138 void operator=(const ConnectivityItemVectorCatalyst& to_con_vec)
139 {
140 to_con_vec.apply(*this);
141 }
142
143 private:
144
145 IItemConnectivityAccessor* m_connectivity_accessor;
146};
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151ARCANE_END_NAMESPACE
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
156#endif
Gère la récupération des informations de connectivité.
ItemVectorView connectedItems(ItemLocalId item)
Retourne les entités connectées à item.
IItemConnectivityAccessor * accessor() const
Connectivité associée.
Interface pour gérer une connectivité incrémentale.
Interface pour gérer l'accès à une connectivité.
virtual void _initializeStorage(ConnectivityItemVector *civ)=0
Implémente l'initialisation de civ pour cette connectivitée.
Interface pour gérer une connectivité.
virtual IItemFamily * targetFamily() const =0
Famille cible.
Index d'un Item dans une variable.
Definition ItemLocalId.h:40
Vue sur un vecteur d'entités.
Vecteur d'entités.
Definition ItemVector.h:59
void resize(Integer new_size)
Positionne le nombre d'éléments du tableau.
Definition ItemVector.h:131
ArrayView< Int32 > viewAsArray()
Vue sur les numéros locaux.
Definition ItemVector.h:117
ItemVector()
Créé un vecteur nul. Il faudra ensuite appeler setFamily() pour l'utiliser.
Definition ItemVector.cc:74
void copy(const U &copy_array)
Recopie le tableau copy_array dans l'instance.
Vue constante d'un tableau de type T.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Type temporaire automatiquement casté en ConnectivityItemVector.