Arcane  4.1.11.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
IndexedIncrementalItemConnectivityMng.cc
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/* IndexedIncrementalItemConnectivityMng.cc (C) 2000-2024 */
9/* */
10/* Manager for 'IIndexedIncrementalItemConnectivity'. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/mesh/IndexedIncrementalItemConnectivityMng.h"
15
16#include "arcane/core/IndexedItemConnectivityView.h"
17#include "arcane/core/IIndexedIncrementalItemConnectivity.h"
18#include "arcane/mesh/IncrementalItemConnectivity.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane::mesh
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29class IndexedIncrementalItemConnectivity
31{
32 public:
33
34 explicit IndexedIncrementalItemConnectivity(IncrementalItemConnectivity* x)
35 : m_true_connectivity(x)
36 {}
37
38 public:
39
41 {
42 return m_true_connectivity;
43 }
45 {
46 return m_true_connectivity->connectivityView();
47 }
48
49 public:
50
51 IncrementalItemConnectivity* m_true_connectivity;
52};
53
54/*---------------------------------------------------------------------------*/
55/*---------------------------------------------------------------------------*/
56
57IndexedIncrementalItemConnectivityMng::
58IndexedIncrementalItemConnectivityMng(ITraceMng* tm)
59: TraceAccessor(tm)
60{
61}
62
63/*---------------------------------------------------------------------------*/
64/*---------------------------------------------------------------------------*/
65
67findOrCreateConnectivity(IItemFamily* source, IItemFamily* target, const String& name)
68{
72 auto x = m_connectivity_map.find(name);
73 if (x != m_connectivity_map.end()) {
74 connectivity = x->second;
75 IIncrementalItemConnectivity* c2 = connectivity->connectivity();
76 IItemFamily* old_source = c2->sourceFamily();
77 IItemFamily* old_target = c2->targetFamily();
78 if (old_source != source)
79 ARCANE_FATAL("A connectivity with the same name '{0}' already exists but with a different source"
80 " old_source={1} new_source={2}",
81 name, old_source->name(), source->name());
82 if (old_target != target)
83 ARCANE_FATAL("A connectivity with the same name '{0}' already exists but with a different target"
84 " old_target={1} new_target={2}",
85 name, old_target->name(), target->name());
86 }
87 else {
88 // The created connectivities are automatically deallocated by the families
89 auto* true_connectivity = new mesh::IncrementalItemConnectivity(source, target, name);
91 m_connectivity_map.insert(std::make_pair(name, connectivity));
92
93 // Adds existing entities to the connectivity.
94 true_connectivity->_internalNotifySourceItemsAdded(source->allItems().view().localIds());
95 }
96 return connectivity;
97}
98
99/*---------------------------------------------------------------------------*/
100/*---------------------------------------------------------------------------*/
101
103findConnectivity(const String& name)
104{
105 auto x = m_connectivity_map.find(name);
106 if (x != m_connectivity_map.end())
107 return x->second;
108 ARCANE_FATAL("No connectivity with name '{0}'", name);
109}
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114} // namespace Arcane::mesh
115
116/*---------------------------------------------------------------------------*/
117/*---------------------------------------------------------------------------*/
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Interface pour gérer une connectivité incrémentale.
virtual IItemFamily * targetFamily() const =0
Famille cible.
virtual IItemFamily * sourceFamily() const =0
Famille source.
Interface pour gérer une connectivité incrémentale.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
virtual String name() const =0
Nom de la famille.
Interface du gestionnaire de traces.
Classe de base d'une vue sur une connectivité non structurée.
Référence à une instance.
Chaîne de caractères unicode.
Ref< IIndexedIncrementalItemConnectivity > findConnectivity(const String &name) override
Cherche ou créé une connectivité.
Ref< IIndexedIncrementalItemConnectivity > findOrCreateConnectivity(IItemFamily *source, IItemFamily *target, const String &name) override
Cherche ou créé une connectivité.
IIncrementalItemConnectivity * connectivity() override
Interface de la connectivité associée.
IndexedItemConnectivityViewBase view() const override
Vue sur la connectivité.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.