12#ifndef ARCANE_ANYITEM_ANYITEMFAMILY_H
13#define ARCANE_ANYITEM_ANYITEMFAMILY_H
17#include <arcane/utils/SharedPtr.h>
24#include "arcane/utils/FatalErrorException.h"
25#include "arcane/anyitem/AnyItemGlobal.h"
26#include "arcane/anyitem/AnyItemPrivate.h"
27#include "arcane/anyitem/AnyItemGroup.h"
28#include "arcane/anyitem/AnyItemFamilyObserver.h"
29#include "arcane/ItemGroupObserver.h"
34namespace Arcane::AnyItem
47 typedef std::set<IFamilyObserver*> FamilyObservers;
71 info.group_index = size;
74 info.is_partial = builder.isPartial();
79 _notifyFamilyIsIncreased();
95 return info->is_partial;
109 return info->group_index;
118 return info->local_id_offset;
122 template<
typename AnyItemT>
127 const Integer group_index =
any_item.groupIndex();
163 _notifyFamilyIsInvalidate();
191 void _notifyFamilyIsInvalidate() {
193 (*it)->notifyFamilyIsInvalidate();
196 void _notifyFamilyIsIncreased() {
198 (*it)->notifyFamilyIsIncreased();
201 void _notifyGroupHasChanged() {
202 throw FatalErrorException(A_FUNCINFO,
"Group changes while registered in AnyItem::Family");
239 Family& operator=(
const Family& f)
280 template<
typename AnyItemT>
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Famille AnyItem partie interne Aggrégation de groupes pour décrire des variables / variables partiell...
Private::GroupIndexMapping m_groups
Conteneur des groupes.
bool contains(const ItemGroup &group) const
retroune vrai si la famille contient le groupe
Integer groupSize() const
Taille de la famille, ie nombre de groupes.
Integer m_max_local_id
Indentifiant maximal (équivalent à la taille de la famille)
ItemGroup group(Integer i) const
Accesseur au i-ème groupe de la famille.
void removeObserver(IFamilyObserver &observer) const
Supprime un observeur.
Item item(const AnyItemT &any_item) const
Retoune l'item concret associé à ce AnyItem.
void registerObserver(IFamilyObserver &observer) const
Enregistre un observeur.
FamilyObservers m_observers
Pour que les objets construits sur la famille ne puissent pas la modifier.
Integer firstLocalId(const ItemGroup &group) const
Position dans la famille du premier localId de ce groupe.
void clear()
Vide la famille.
Group allItems() const
Groupe de tous les items.
bool isPartial(const ItemGroup &group) const
retourne vrai si le groupe est associé à une variable partielle
Integer maxLocalId() const
Nombre d'items dans cette famille.
Integer groupIndex(const ItemGroup &group) const
Position du groupe dans la famille.
FamilyInternal & operator<<(GroupBuilder builder)
Ajout d'un groupe dans la famille.
Famille AnyItem (pattern flyweight) Aggrégation de groupes pour décrire des variables / variables par...
ItemGroup group(Integer i) const
Accesseur au i-ème groupe de la famille.
Integer maxLocalId() const
Nombre d'items dans cette famille.
Integer firstLocalId(const ItemGroup &group) const
Position dans la famille du premier localId de ce groupe.
bool operator==(const Family &f) const
Comparaisons.
Item item(const AnyItemT &any_item) const
Retoune l'item concret associé à ce AnyItem.
SharedPtrT< FamilyInternal > m_internal
Famille interne.
bool isPartial(const ItemGroup &group) const
retourne vrai si le groupe est associé à une variable partielle
void removeObserver(IFamilyObserver &observer) const
Supprime un observeur.
Integer groupSize() const
Taille de la famille, ie nombre de groupes.
Group allItems()
Groupe de tous les items.
void clear()
Vide la famille.
Family & operator<<(GroupBuilder builder)
Ajout d'un groupe dans la famille.
bool contains(const ItemGroup &group) const
retroune vrai si la famille contient le groupe
void registerObserver(IFamilyObserver &observer) const
Enregistre un observeur.
Integer groupIndex(const ItemGroup &group) const
Position du groupe dans la famille.
Outil pour construire un groupe.
Groupe AnyItem Agglomération de groupe Arcane + informations {partiel ou non} pour les variables Cons...
Interface d'observeurs de famille AnyItem.
Implémentation d'un groupe d'entités de maillage.
void attachObserver(const void *ref, IItemGroupObserver *obs)
Attache un observer.
Groupe d'entités de maillage.
ItemGroupImpl * internal() const
Retourne l'implémentation du groupe.
const String & name() const
Nom du groupe.
Integer size() const
Nombre d'éléments du groupe.
Classe de base d'un élément de maillage.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Integer size() const
Nombre d'éléments du vecteur.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
void clear()
Supprime les éléments du tableau.
Exception lorsqu'une erreur fatale est survenue.
IItemGroupObserver * newItemGroupObserverT(T *object, typename IItemGroupObserver::FuncTraits< T >::FuncPtr funcptr)
Utilitaire pour création simplifié de ItemGroupObserverT.