12#ifndef ARCANE_CORE_ANYITEM_ANYITEMFAMILY_H 
   13#define ARCANE_CORE_ANYITEM_ANYITEMFAMILY_H  
   17#include <arcane/utils/SharedPtr.h> 
   24#include "arcane/utils/FatalErrorException.h" 
   25#include "arcane/core/anyitem/AnyItemGlobal.h" 
   26#include "arcane/core/anyitem/AnyItemPrivate.h" 
   27#include "arcane/core/anyitem/AnyItemGroup.h" 
   28#include "arcane/core/anyitem/AnyItemFamilyObserver.h" 
   29#include "arcane/core/ItemGroupObserver.h" 
   34namespace Arcane::AnyItem
 
   47  typedef std::set<IFamilyObserver*> FamilyObservers;
 
   70    info.group = 
group.internal();
 
   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();
 
  130    Integer index_in_group = any_item.localId() - info.local_id_offset;
 
 
  156      m_groups[igrp].group->detachObserver(
this);
 
  163    _notifyFamilyIsInvalidate();
 
 
  169    FamilyObservers::const_iterator it = 
m_observers.find(&observer);
 
 
  178    FamilyObservers::const_iterator it = 
m_observers.find(&observer);
 
 
  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...
Exception lorsqu'une erreur fatale est survenue.
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.
Classe de base d'un élément de maillage.
Int32 Integer
Type représentant un entier.
IItemGroupObserver * newItemGroupObserverT(T *object, typename IItemGroupObserver::FuncTraits< T >::FuncPtr funcptr)
Utilitaire pour création simplifié de ItemGroupObserverT.