12#ifndef ARCANE_CONNECTIVITYMANAGER_H
13#define ARCANE_CONNECTIVITYMANAGER_H
18#include "arcane/utils/ITraceMng.h"
19#include "arcane/utils/Array.h"
21#include "arcane/core/IItemConnectivity.h"
22#include "arcane/core/IItemConnectivityMng.h"
23#include "arcane/core/IItemConnectivitySynchronizer.h"
24#include "arcane/core/IIncrementalItemConnectivity.h"
25#include "arcane/core/IItemFamily.h"
50 FamilyState(
const FamilyState&) =
default;
51 virtual ~FamilyState() =
default;
75class ConnectivityStateData
79 ConnectivityStateData()
80 : m_last_family_state(-1)
81 , m_last_added_item_index(-1)
82 , m_last_removed_item_index(-1)
84 ConnectivityStateData(
const ConnectivityStateData&) =
default;
85 virtual ~ConnectivityStateData() =
default;
90 Integer m_last_added_item_index;
91 Integer m_last_removed_item_index;
94class ConnectivityState
98 ConnectivityState() {}
99 ConnectivityState(
const ConnectivityState&) =
default;
100 virtual ~ConnectivityState() =
default;
118 : m_trace_mng(trace_mng)
124 for (
const auto& map_element : m_synchronizers) {
125 if (map_element.second)
126 delete map_element.second;
133 connectivity->
sourceFamily()->addSourceConnectivity(connectivity);
134 connectivity->
targetFamily()->addTargetConnectivity(connectivity);
143 connectivity->
sourceFamily()->removeSourceConnectivity(connectivity);
144 connectivity->
targetFamily()->removeTargetConnectivity(connectivity);
148 void registerConnectivity(IIncrementalItemConnectivity* connectivity)
override
153 connectivity->sourceFamily()->setConnectivityMng(
this);
154 connectivity->targetFamily()->setConnectivityMng(
this);
155 _register(connectivity->name(), connectivity->sourceFamily()->fullName(), connectivity->targetFamily()->fullName());
158 void unregisterConnectivity([[maybe_unused]] IIncrementalItemConnectivity* connectivity)
override
169 IItemConnectivitySynchronizer* createSynchronizer(IItemConnectivity* connectivity,
170 IItemConnectivityGhostPolicy* connectivity_ghost_policy)
override;
171 IItemConnectivitySynchronizer* getSynchronizer(IItemConnectivity* connectivity)
override
174 return m_synchronizers[connectivity];
178 void setModifiedItems(IItemFamily* family, Int32ConstArrayView added_items, Int32ConstArrayView removed_items)
override;
181 void notifyLocalIdChanged(IItemFamily* family, Int32ConstArrayView old_to_new_ids, Integer nb_item)
override;
190 return (_lastUpdateSourceFamilyState(connectivity->
name()) == _familyState(connectivity->
sourceFamily()->
fullName()));
194 return (_lastUpdateTargetFamilyState(connectivity->
name()) == _familyState(connectivity->
targetFamily()->
fullName()));
207 return (_lastUpdateSourceFamilyState(connectivity->
name()) == _familyState(connectivity->
sourceFamily()->
fullName()));
211 return (_lastUpdateTargetFamilyState(connectivity->
name()) == _familyState(connectivity->
targetFamily()->
fullName()));
230 void _register(
const String& connectivity_name,
const String& from_family_name,
const String& to_family_name);
231 Integer _lastUpdateSourceFamilyState(
const String& connectivity_name);
232 Integer _lastUpdateTargetFamilyState(
const String& connectivity_name);
240 std::map<IItemConnectivity*, IItemConnectivitySynchronizer*> m_synchronizers;
241 typedef std::map<const String, FamilyState> FamilyStateMap;
242 FamilyStateMap m_family_states;
243 typedef std::map<const String, ConnectivityState> ConnectivityStateMap;
244 ConnectivityStateMap m_connectivity_states;
Arcane configuration file.
Int32SharedArray m_removed_items
idem
Int32SharedArray m_added_items
Concatenation of all the family changes during the simulation.
IntegerSharedArray m_state_first_removed_item_index
Int32UniqueArray m_current_added_items
Current added items (no history).
IntegerSharedArray m_state_first_added_item_index
Interface for managing an incremental connectivity.
virtual String name() const =0
Name of the connectivity.
virtual IItemFamily * targetFamily() const =0
Target family.
virtual IItemFamily * sourceFamily() const =0
Source family.
Interface to manage connectivity.
virtual IItemFamily * targetFamily() const =0
Target family.
virtual IItemFamily * sourceFamily() const =0
Source family.
virtual const String & name() const =0
Name of the connectivity.
virtual String fullName() const =0
Full family name (with the mesh's name).
bool isUpToDateWithSourceFamily(IIncrementalItemConnectivity *connectivity) override
relative to the source family and the target family
bool isUpToDateWithSourceFamily(IItemConnectivity *connectivity) override
relative to the source family and the target family
bool isUpToDateWithTargetFamily(IIncrementalItemConnectivity *connectivity) override
relative to the source family
void registerConnectivity(IItemConnectivity *connectivity) override
Registering a connectivity.
ItemConnectivityMng(ITraceMng *trace_mng)
bool isUpToDateWithTargetFamily(IItemConnectivity *connectivity) override
relative to the source family
bool isUpToDate(IItemConnectivity *connectivity) override
Test if the connectivity is up to date compared to the source family and the target family.
bool isUpToDate(IIncrementalItemConnectivity *connectivity) override
Test if the connectivity is up to date compared to the source family and the target family.
~ItemConnectivityMng() override
Unicode character string.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Int32 Integer
Type representing an integer.
SharedArray< Int32 > Int32SharedArray
Dynamic 1D array of 32-bit integers.
UniqueArray< Int32 > Int32UniqueArray
Dynamic 1D array of 32-bit integers.
ArrayView< Int32 > Int32ArrayView
C equivalent of a 1D array of 32-bit integers.
SharedArray< Integer > IntegerSharedArray
Dynamic 1D array of integers.