Arcane  v3.14.10.0
Documentation développeur
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
28
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:
51 : m_mesh(mesh), m_group_name(groupName) {}
52
54 virtual ~ItemGroupBuilder() {}
55
56 public:
58 void add(ItemEnumeratorT<T> enumerator)
59 {
60 while(enumerator.hasNext())
61 {
62 m_ids.insert(enumerator.localId());
63 ++enumerator;
64 }
65 }
66
69 {
70 while(enumerator.hasNext())
71 {
72 m_ids.insert(enumerator.itemLocalId());
73 ++enumerator;
74 }
75 }
76
78 void add(const T & item)
79 {
80 m_ids.insert(item.localId());
81 }
82
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
111 {
112 return m_group_name;
113 }
114};
115
116#endif /* ITEMGROUPBUILDER_H */
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
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.