Arcane  v3.16.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
FaceFamilyPolicyMng.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* Gestionnaire des politiques d'une famille de faces. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/NotSupportedException.h"
15
16#include "arcane/IMesh.h"
17#include "arcane/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 private:
83 FaceFamily* m_family;
84 TiedInterfaceSerializeStepFactory m_tied_interface_serialize_factory;
85};
86
87/*---------------------------------------------------------------------------*/
88/*---------------------------------------------------------------------------*/
89
90extern "C++" ARCANE_MESH_EXPORT IItemFamilyPolicyMng*
91createFaceFamilyPolicyMng(ItemFamily* family)
92{
93 FaceFamily* f = ARCANE_CHECK_POINTER(dynamic_cast<FaceFamily*>(family));
94 return new FaceFamilyPolicyMng(f);
95}
96
97/*---------------------------------------------------------------------------*/
98/*---------------------------------------------------------------------------*/
99
100} // End namespace Arcane::mesh
101
102/*---------------------------------------------------------------------------*/
103/*---------------------------------------------------------------------------*/
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Interface des politiques d'une famille d'entités.
Fabrique pour créer une étape de la sérialisation des familles d'entités.
Interface d'une étape de la sérialisation des familles d'entités.
Gère la sérialisation/désérialisation des entités d'une famille.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
virtual IMesh * mesh() const =0
Maillage associé
Sérialisation/Désérialisation indirecte des familles d'entités.
Gestionnaire des politiques d'une famille d'entités.
Sérialisation/Désérialisation des familles d'entités.
Exception lorsqu'une opération n'est pas supportée.
Echangeur entre sous-domaines les interfaces liées.
Implémentation d'un maillage.
Definition DynamicMesh.h:97
IItemFamilySerializeStep * createStep(IItemFamily *family)
Créé une étape pour la famille family.
Gestionnaire des politiques d'une famille de faces.
IItemFamilySerializer * createSerializer(bool use_flags) override
Créé une instance pour la sérialisation des entités. L'instance retournée doit être détruite par l'op...
Famille de faces.
Definition FaceFamily.h:53
Politique de compactage pour familles d'entités Node, Edge, Face ou Cell.
void arcaneCallFunctionAndTerminateIfThrow(std::function< void()> function)