Arcane  4.1.12.0
User documentation
Loading...
Searching...
No Matches
ConnectivityItemVector.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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-2025 */
9/* */
10/* Interface for entity connectivity accessors. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_CONNECTIVITYITEMVECTOR_H
13#define ARCANE_CORE_CONNECTIVITYITEMVECTOR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ArrayView.h"
18#include "arcane/utils/String.h"
19
21#include "arcane/core/ItemVector.h"
22#include "arcane/core/IItemConnectivity.h"
23#include "arcane/core/IIncrementalItemConnectivity.h"
24
25#include <functional>
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane
31{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36/*!
37 * \brief Temporary type automatically cast to ConnectivityItemVector
38 */
40{
41 std::function<void(ConnectivityItemVector&)> set;
42 std::function<void(ConnectivityItemVector&)> apply; // When C++14 available, use a template type (will avoid std::function object and allow more genericity).
43};
44
45/*---------------------------------------------------------------------------*/
46/*---------------------------------------------------------------------------*/
47
48/*!
49 * \brief Manages the retrieval of connectivity information.
50 *
51 * \sa IItemConnectivity
52 * \sa IIncrementalItemConnectivity
53 * \sa IItemConnectivityAccessor.
54 */
55class ARCANE_CORE_EXPORT ConnectivityItemVector
56: public ItemVector
57// SDC new API: user handles ConnectivityItemVector directly and iterates on it... needs
58// public inheritance.
59// the Use of views as in first version is confusing for user that doesn't understand
60// where the view comes from and easily invalidates it...
61{
62 public:
63
64 ConnectivityItemVector(IItemConnectivity* c)
66 , m_connectivity_accessor(c)
67 {
68 c->_initializeStorage(this);
69 }
70 ConnectivityItemVector(IItemConnectivity& c)
72 , m_connectivity_accessor(&c)
73 {
74 c._initializeStorage(this);
75 }
76 ConnectivityItemVector(IIncrementalItemConnectivity* c)
78 , m_connectivity_accessor(c)
79 {
80 c->_initializeStorage(this);
81 }
82 ConnectivityItemVector(IIncrementalItemConnectivity& c)
84 , m_connectivity_accessor(&c)
85 {
86 c._initializeStorage(this);
87 }
88 ConnectivityItemVector(const ConnectivityItemVectorCatalyst& to_c)
89 : ItemVector()
90 , m_connectivity_accessor(nullptr)
91 {
92 to_c.set(*this);
93 to_c.apply(*this);
94 }
95
96 public:
97
98 //! Associated connectivity
99 IItemConnectivityAccessor* accessor() const { return m_connectivity_accessor; }
100
101 //! Returns the entities connected to \a item.
103 {
104 return m_connectivity_accessor->_connectedItems(item, *this);
105 }
106
107 public:
108
109 /*!
110 * \internal
111 * \brief Positions the connectivity list with the entities
112 * specified by \a ids.
113 */
114 ItemVectorView resizeAndCopy(Int32ConstArrayView ids)
115 {
116 this->resize(ids.size());
117 this->viewAsArray().copy(ids);
118 return (*this);
119 }
120
121 /*!
122 * \internal
123 * \brief Positions the connectivity list with the entity
124 * of localId() \a id.
125 */
126 ItemVectorView setItem(Int32 id)
127 {
128 this->resize(1);
129 this->viewAsArray()[0] = id;
130 return (*this);
131 }
132
133 /*!
134 * \internal
135 * \brief Allows retrieving the ConnectivityItemVector
136 */
137 void operator=(const ConnectivityItemVectorCatalyst& to_con_vec)
138 {
139 to_con_vec.apply(*this);
140 }
141
142 private:
143
144 IItemConnectivityAccessor* m_connectivity_accessor = nullptr;
145};
146
147/*---------------------------------------------------------------------------*/
148/*---------------------------------------------------------------------------*/
149
150} // namespace Arcane
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
155#endif
Declarations of types on entities.
Manages the retrieval of connectivity information.
ItemVectorView connectedItems(ItemLocalId item)
Returns the entities connected to item.
IItemConnectivityAccessor * accessor() const
Associated connectivity.
constexpr Integer size() const noexcept
Number of elements in the array.
Interface for managing an incremental connectivity.
Interface to manage access to a connectivity.
virtual void _initializeStorage(ConnectivityItemVector *civ)=0
Implements the initialization of civ for this connectivity.
Interface to manage connectivity.
virtual IItemFamily * targetFamily() const =0
Target family.
Index of an Item in a variable.
Definition ItemLocalId.h:42
View on a vector of entities.
ItemVector(IItemFamily *afamily)
Creates an empty vector associated with the family family.
Definition ItemVector.cc:38
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
ConstArrayView< Int32 > Int32ConstArrayView
C equivalent of a 1D array of 32-bit integers.
Definition UtilsTypes.h:482
Temporary type automatically cast to ConnectivityItemVector.