Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IIncrementalItemConnectivity.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* IIncrementalItemConnectivity.h (C) 2000-2024 */
9/* */
10/* Interface de connectivité incrémentale des entités. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IINCREMENTALITEMCONNECTIVITY_H
13#define ARCANE_CORE_IINCREMENTALITEMCONNECTIVITY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/ArrayView.h"
18
20#include "arcane/core/IItemConnectivityAccessor.h"
21
22/*---------------------------------------------------------------------------*/
23/*---------------------------------------------------------------------------*/
24
25namespace Arcane
26{
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30/*!
31 * \brief Interface de la source d'une connectivité incrémentale
32 */
33class ARCANE_CORE_EXPORT IIncrementalItemSourceConnectivity
34{
36
37 protected:
38
39 virtual ~IIncrementalItemSourceConnectivity() = default;
40
41 public:
42
43 //! Famille source
44 virtual IItemFamily* sourceFamily() const = 0;
45
46 //TODO: utiliser un mécanisme par évènement.
47 //! Notifie la connectivité que la famille source est compactée.
48 virtual void notifySourceFamilyLocalIdChanged(Int32ConstArrayView new_to_old_ids) = 0;
49
50 //! Notifie la connectivité qu'une entité a été ajoutée à la famille source.
51 virtual void notifySourceItemAdded(ItemLocalId item) = 0;
52
53 /*!
54 * \brief Réserve la mémoire pour \a n entités sources.
55 *
56 * L'appel à cette méthode est optionnel mais permet d'éviter de multiples
57 * réallocations lors d'appels successifs à notifySourceItemAdded().
58 *
59 * Si \a pre_alloc_connectivity est vrai, pré-alloue aussi les la liste des
60 * connectivités en fonction de la valeur de preAllocatedSize(). Par exemple
61 * si preAllocatedSize() vaut 4 et si \a n vaut 10000, on va pré-allouer
62 * pour 40000 connectivités. Pour éviter une surconsommation mémoire inutile,
63 * il ne faut pré-allouer les connectivités que si on est sur qu'on va les utiliser.
64 */
65 virtual void reserveMemoryForNbSourceItems(Int32 n, bool pre_alloc_connectivity);
66
67 //! Notifie la connectivité qu'on a effectué une relecture à partir d'une protection
68 virtual void notifyReadFromDump() = 0;
69
70 //! Retourne une référence sur l'instance
71 virtual Ref<IIncrementalItemSourceConnectivity> toSourceReference() = 0;
72
73 private:
74
75 // Interfaces réservées à Arcane
76
77 //! Notifie la connectivité que les entités \a items ont été ajoutées à la famille source
78 virtual void _internalNotifySourceItemsAdded(Int32ConstArrayView items);
79};
80
81/*---------------------------------------------------------------------------*/
82/*---------------------------------------------------------------------------*/
83/*!
84 * \brief Interface de la cible d'une connectivité incrémentale
85 */
86class ARCANE_CORE_EXPORT IIncrementalItemTargetConnectivity
87{
89
90 protected:
91
92 virtual ~IIncrementalItemTargetConnectivity() = default;
93
94 public:
95
96 //TODO: utiliser un mécanisme par évènement.
97 //! Notifie la connectivité que la famille cible est compactée.
98 virtual void notifyTargetFamilyLocalIdChanged(Int32ConstArrayView old_to_new_ids) = 0;
99
100 //! Retourne une référence sur l'instance
101 virtual Ref<IIncrementalItemTargetConnectivity> toTargetReference() = 0;
102};
103
104/*---------------------------------------------------------------------------*/
105/*---------------------------------------------------------------------------*/
106/*!
107 * \brief Interface pour gérer une connectivité incrémentale.
108 *
109 * Une connectivité relie deux familles, une source (sourceFamily()) et
110 * une cible (targetFamily()).
111 */
112class ARCANE_CORE_EXPORT IIncrementalItemConnectivity
116{
118
119 public:
120
121 //TODO rendre 'protected' une fois que tout le monde utilisera le compteur de référence
123
124 public:
125
126 //! Nom de la connectivité
127 virtual String name() const = 0;
128
129 //! Liste des familles (sourceFamily() + targetFamily())
131
132 //! Famille cible
133 virtual IItemFamily* targetFamily() const = 0;
134
135 //! Ajoute l'entité de localId() \a target_local_id à la connectivité de \a source_item
136 virtual void addConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id) = 0;
137
138 /*!
139 * \brief Alloue et positionne les entités connectées à \a source_item.
140 *
141 * S'il y avait des déjà des entités connectées à \a source_item, elles sont supprimées.
142 * \a target_local_ids contient la liste des numéros locaux des entités à ajouter.
143 * Cette méthode est équivalente à appeler le code suivant mais permet des optimisations sur la
144 * gestion mémoire:
145 * \code
146 * IIncrementalItemConnectivity* c = ...;
147 * c->removeConnectedItems(source_item);
148 * for( Int32 x : target_local_ids )
149 * c->addConnectedItem(source_item,ItemLocalId{x});
150 * \endcode
151 */
152 virtual void setConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids);
153
154 //! Supprime l'entité de localId() \a target_local_id à la connectivité de \a source_item
155 virtual void removeConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id) = 0;
156
157 //! Supprime toute les entités connectées à \a source_item
158 virtual void removeConnectedItems(ItemLocalId source_item) = 0;
159
160 //! Remplace l'entité d'index \a index de \a source_item par l'entité de localId() \a target_local_id
161 virtual void replaceConnectedItem(ItemLocalId source_item, Integer index, ItemLocalId target_local_id) = 0;
162
163 //! Remplace les entités de \a source_item par les entités de localId() \a target_local_ids
164 virtual void replaceConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids) = 0;
165
166 //! Test l'existence d'un connectivité entre \a source_item et l'entité de localId() \a target_local_id
167 virtual bool hasConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id) const = 0;
168
169 /*!
170 * \brief Nombre maximum d'entités connectées à une entité source.
171 *
172 * Cette valeur peut être supérieure au nombre maximum actuel d'entités
173 * connectées s'il y a eu des appels à removeConnectedItem() et removeConnectedItems().
174 */
175 virtual Int32 maxNbConnectedItem() const = 0;
176
177 //! Nombre d'entités pré-alloués pour la connectivité de chaque entité
178 virtual Integer preAllocatedSize() const = 0;
179
180 //! Positionne le nombre d'entités à pré-allouer pour la connectivité de chaque entité
181 virtual void setPreAllocatedSize(Integer value) = 0;
182
183 //! Sort sur le flot \a out des statistiques sur l'utilisation et la mémoire utilisée
184 virtual void dumpStats(std::ostream& out) const = 0;
185
186 //! API interne à Arcane
187 virtual IIncrementalItemConnectivityInternal* _internalApi() = 0;
188};
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192
193} // End namespace Arcane
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
197
198#endif
Déclarations de types sur les entités.
#define ARCCORE_DECLARE_REFERENCE_COUNTED_INCLASS_METHODS()
Macro pour déclarer les méthodes virtuelles gérant les compteurs de référence.
Interface pour gérer une connectivité incrémentale.
virtual bool hasConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id) const =0
Test l'existence d'un connectivité entre source_item et l'entité de localId() target_local_id.
virtual void replaceConnectedItem(ItemLocalId source_item, Integer index, ItemLocalId target_local_id)=0
Remplace l'entité d'index index de source_item par l'entité de localId() target_local_id.
virtual String name() const =0
Nom de la connectivité
virtual void dumpStats(std::ostream &out) const =0
Sort sur le flot out des statistiques sur l'utilisation et la mémoire utilisée.
virtual ConstArrayView< IItemFamily * > families() const =0
Liste des familles (sourceFamily() + targetFamily())
virtual void replaceConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids)=0
Remplace les entités de source_item par les entités de localId() target_local_ids.
virtual void removeConnectedItems(ItemLocalId source_item)=0
Supprime toute les entités connectées à source_item.
virtual void removeConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id)=0
Supprime l'entité de localId() target_local_id à la connectivité de source_item.
virtual void addConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id)=0
Ajoute l'entité de localId() target_local_id à la connectivité de source_item.
virtual IItemFamily * targetFamily() const =0
Famille cible.
virtual IIncrementalItemConnectivityInternal * _internalApi()=0
API interne à Arcane.
virtual Int32 maxNbConnectedItem() const =0
Nombre maximum d'entités connectées à une entité source.
virtual void setPreAllocatedSize(Integer value)=0
Positionne le nombre d'entités à pré-allouer pour la connectivité de chaque entité
virtual Integer preAllocatedSize() const =0
Nombre d'entités pré-alloués pour la connectivité de chaque entité
Interface de la source d'une connectivité incrémentale.
virtual void notifyReadFromDump()=0
Notifie la connectivité qu'on a effectué une relecture à partir d'une protection.
virtual IItemFamily * sourceFamily() const =0
Famille source.
virtual void notifySourceFamilyLocalIdChanged(Int32ConstArrayView new_to_old_ids)=0
Notifie la connectivité que la famille source est compactée.
virtual void notifySourceItemAdded(ItemLocalId item)=0
Notifie la connectivité qu'une entité a été ajoutée à la famille source.
virtual Ref< IIncrementalItemSourceConnectivity > toSourceReference()=0
Retourne une référence sur l'instance.
Interface de la cible d'une connectivité incrémentale.
virtual void notifyTargetFamilyLocalIdChanged(Int32ConstArrayView old_to_new_ids)=0
Notifie la connectivité que la famille cible est compactée.
virtual Ref< IIncrementalItemTargetConnectivity > toTargetReference()=0
Retourne une référence sur l'instance.
Interface pour gérer l'accès à une connectivité.
Interface d'une famille d'entités.
Index d'un Item dans une variable.
Definition ItemLocalId.h:40
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-