Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
FaceFamilyPolicyMng.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/* FaceFamilyPolicyMng.cc (C) 2000-2022 */
9/* */
10/* Policy manager for a face family. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/NotSupportedException.h"
15
16#include "arcane/core/IMesh.h"
17#include "arcane/core/IItemFamilyNetwork.h"
18
19#include "arcane/mesh/ItemFamilyPolicyMng.h"
20#include "arcane/mesh/ItemFamilyCompactPolicy.h"
21#include "arcane/mesh/IndirectItemFamilySerializer.h"
22#include "arcane/mesh/TiedInterfaceExchanger.h"
23#include "arcane/mesh/DynamicMesh.h"
24#include "arcane/mesh/DynamicMeshIncrementalBuilder.h"
25#include "arcane/mesh/FaceFamily.h"
26#include "arcane/mesh/ItemFamilySerializer.h"
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
30
31namespace Arcane::mesh
32{
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
39class ARCANE_MESH_EXPORT FaceFamilyPolicyMng
40: public ItemFamilyPolicyMng
41{
44 {
46 {
47 IMesh* mesh = family->mesh();
48 if (mesh->hasTiedInterface()) {
50 return new TiedInterfaceExchanger(x);
51 }
52 return nullptr;
53 }
54 };
55
56 public:
57
60 , m_family(family)
61 {
62 addSerializeStep(&m_tied_interface_serialize_factory);
63 }
64 ~FaceFamilyPolicyMng()
65 {
66 arcaneCallFunctionAndTerminateIfThrow([&]() { removeSerializeStep(&m_tied_interface_serialize_factory); });
67 }
68
69 public:
70
71 IItemFamilySerializer* createSerializer(bool use_flags) override
72 {
73 if (use_flags)
74 throw NotSupportedException(A_FUNCINFO, "serialisation with 'use_flags==true'");
75 IMesh* mesh = m_family->mesh();
76 DynamicMesh* dmesh = ARCANE_CHECK_POINTER(dynamic_cast<DynamicMesh*>(mesh));
77 if (m_family->mesh()->useMeshItemFamilyDependencies())
78 return new ItemFamilySerializer(m_family, m_family, dmesh->incrementalBuilder());
79 else
80 return new IndirectItemFamilySerializer(m_family);
81 }
82
83 private:
84
85 FaceFamily* m_family;
86 TiedInterfaceSerializeStepFactory m_tied_interface_serialize_factory;
87};
88
89/*---------------------------------------------------------------------------*/
90/*---------------------------------------------------------------------------*/
91
92extern "C++" ARCANE_MESH_EXPORT IItemFamilyPolicyMng*
93createFaceFamilyPolicyMng(ItemFamily* family)
94{
95 FaceFamily* f = ARCANE_CHECK_POINTER(dynamic_cast<FaceFamily*>(family));
96 return new FaceFamilyPolicyMng(f);
97}
98
99/*---------------------------------------------------------------------------*/
100/*---------------------------------------------------------------------------*/
101
102} // End namespace Arcane::mesh
103
104/*---------------------------------------------------------------------------*/
105/*---------------------------------------------------------------------------*/
#define ARCANE_CHECK_POINTER(ptr)
Macro returning the pointer ptr if it is not null or throwing an exception if it is null.
Interface for entity family policies.
Factory for creating a step in the serialization of entity families.
Interface for a step in the serialization of entity families.
Manages the serialization/deserialization of entities in a family.
Interface of an entity family.
Definition IItemFamily.h:83
virtual IMesh * mesh() const =0
Associated mesh.
Implementation of a mesh.
Definition DynamicMesh.h:98
IItemFamilySerializeStep * createStep(IItemFamily *family)
Creates a step for the family family.
Policy manager for a face family.
IItemFamilySerializer * createSerializer(bool use_flags) override
Creates an instance for entity serialization. The returned instance must be destroyed by the delete o...
Indirect serialization/deserialization of entity families.
Manager for the policies of a family of entities.
Serialization/Deserialization of item families.
Compaction policy for Node, Edge, Face, or Cell entity families.
Exchanger between sub-domains of linked interfaces.
void arcaneCallFunctionAndTerminateIfThrow(std::function< void()> function)
Calls the function function and calls std::terminate() if an exception occurs.