Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ItemGroupBuilder.h
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#ifndef ITEMGROUPBUILDER_H
8#define ITEMGROUPBUILDER_H
9
10#include <set>
11#include <cstring>
12#include <cctype>
13
14#include <arcane/ArcaneVersion.h>
15#include <arcane/ItemGroup.h>
16#include <arcane/IMesh.h>
17#include <arcane/utils/String.h>
18#include <arcane/utils/StringBuilder.h>
19#include <arcane/IItemFamily.h>
20#include <arcane/ItemGroupRangeIterator.h>
21
22using namespace Arcane;
23
24#define STRINGIFY(x) #x
25#define TOSTRING(x) STRINGIFY(x)
26
27//! Macro de construction d'un nom d'objet
28/*! Sert généralement à nommer des groupes pour ItemGroupBuilder */
29#define IMPLICIT_NAME ItemGroupBuilder_cleanString(__FILE__ "__" TOSTRING(__LINE__),false)
30#define IMPLICIT_UNIQ_NAME ItemGroupBuilder_cleanString(__FILE__ "__" TOSTRING(__LINE__),true)
31
32/*
33 * \internal
34 * \brief Outil de construction assisté de groupe
35 *
36 * L'unicité des éléments du groupe est garantie par construction. Il
37 * est possible d'utiliser la macro IMPLICIT_NAME pour nommer nom de
38 * groupe.
39 */
40template<typename T>
42{
43 private:
44 IMesh* m_mesh;
45 std::set<Integer> m_ids;
46 String m_group_name;
47
48 public:
49 //! Constructeur
50 ItemGroupBuilder(IMesh* mesh,const String& groupName)
51 : m_mesh(mesh), m_group_name(groupName) {}
52
53 //! Destructeur
54 virtual ~ItemGroupBuilder() {}
55
56 public:
57 //! Ajout d'un ensemble d'item fourni par un énumérateur
58 void add(ItemEnumeratorT<T> enumerator)
59 {
60 while(enumerator.hasNext())
61 {
62 m_ids.insert(enumerator.localId());
63 ++enumerator;
64 }
65 }
66
67 //! Ajout d'un ensemble d'item fourni par un énumérateur
69 {
70 while(enumerator.hasNext())
71 {
72 m_ids.insert(enumerator.itemLocalId());
73 ++enumerator;
74 }
75 }
76
77 //! Ajout d'un item unique
78 void add(const T & item)
79 {
80 m_ids.insert(item.localId());
81 }
82
83 //! Constructeur du nouveau group
85 {
86 Int32UniqueArray localIds(m_ids.size());
87
88 std::set<Integer>::const_iterator is = m_ids.begin();
89 Integer i = 0;
90
91 while(is != m_ids.end())
92 {
93 localIds[i] = *is;
94 ++is; ++i;
95 }
96
97// ItemGroup newGroup(new ItemGroupImpl(m_mesh->itemFamily(ItemTraitsT<T>::kind()),
98// m_group_name));
99 ItemGroup newGroup = m_mesh->itemFamily(ItemTraitsT<T>::kind())->findGroup(m_group_name,true);
100// m_item_family->createGroup(own_name,ItemGroup(this));
101
102 newGroup.clear();
103 newGroup.setItems(localIds);
104 // newGroup.setLocalToSubDomain(true); // Force le nouveau a être local : non transférer en cas de rééquilibrage
105
106 return newGroup;
107 }
108
109 //! Nom du groupe
111 {
112 return m_group_name;
113 }
114};
115
116#endif /* ITEMGROUPBUILDER_H */
virtual ItemGroup findGroup(const String &name) const =0
Recherche un groupe.
virtual IItemFamily * itemFamily(eItemKind ik)=0
Retourne la famille d'entité de type ik.
Int32 localId() const
localId() de l'entité courante.
constexpr bool hasNext()
Vrai si on n'a pas atteint la fin de l'énumérateur (index()<count())
Enumérateur sur une liste typée d'entités de type ItemType.
Intervalle d'itération sur un groupe d'entités de maillage.
Référence à un groupe d'un genre donné.
Definition ItemGroup.h:398
Groupe d'entités de maillage.
Definition ItemGroup.h:49
void clear()
Supprime les entités du groupe.
Definition ItemGroup.cc:428
void setItems(Int32ConstArrayView items_local_id)
Positionne les entités du groupe.
Definition ItemGroup.cc:488
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
String getName() const
Nom du groupe.
void add(ItemEnumeratorT< T > enumerator)
Ajout d'un ensemble d'item fourni par un énumérateur.
virtual ~ItemGroupBuilder()
Destructeur.
ItemGroupT< T > buildGroup()
Constructeur du nouveau group.
void add(const T &item)
Ajout d'un item unique.
void add(ItemGroupRangeIteratorT< T > enumerator)
Ajout d'un ensemble d'item fourni par un énumérateur.
ItemGroupBuilder(IMesh *mesh, const String &groupName)
Constructeur.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.