Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
AnyItemLinkVariable.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/*---------------------------------------------------------------------------*/
8/* AnyItemLinkVariable.h (C) 2000-2022 */
9/* */
10/* Variable de liens d'items de types quelconques. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ANYITEM_ANYITEMLINKVARIABLE_H
13#define ARCANE_ANYITEM_ANYITEMLINKVARIABLE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/anyitem/AnyItemGlobal.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane::AnyItem
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28/*
29 * \brief Variable de liens d'items de types quelconques.
30 *
31 * Par exemple :
32 *
33 * AnyItem::Variable<Real> variable(family); // Remplie
34 * AnyItem::LinkVariable<Real> link_variable(link_family); // Remplie
35 *
36 * Real value = 0;
37 * ENUMERATE_ANY_ITEM_LINK(ilink, link_family) {
38 * if(ilink.index() < 10) {
39 * info() << "back item = [uid=" << family.concreteItem(ilink.back()).uniqueId()
40 * << ",lid=" << family.concreteItem(ilink.back()).localId() << ",kind="
41 * << family.concreteItem(ilink.back()).kind() << "]";
42 * info() << "front item = [uid=" << family.concreteItem(ilink.front()).uniqueId()
43 * << ",lid=" << family.concreteItem(ilink.front()).localId() << ",kind="
44 * << family.concreteItem(ilink.front()).kind() << "]";
45 * }
46 * value += link_variable[ilink] + variable[ilink.back()] + variable[ilink.front()];
47 * }
48 *
49 */
50template<typename DataType>
52 : public ILinkFamilyObserver
53{
54public:
55
56 LinkVariable(const LinkFamily& family)
57 : m_family(family)
59 {
61 }
62
64 : m_family(v.m_family)
65 , m_values(v.m_values)
66 {
68 }
69
71 {
73 }
74
76 inline DataType& operator[](const LinkFamily::LinkIndex& item) {
77 return m_values[item.index()];
78 }
79
81 inline DataType operator[](const LinkFamily::LinkIndex& item) const {
82 return m_values[item.index()];
83 }
84
87 // Si la famille change, on retaille
88 m_values.resize(m_family.capacity());
89 }
90
92 inline void notifyFamilyIsReserved() {
93 // Si la famille est reservée, on retaille simplement
94 m_values.resize(m_family.capacity());
95 }
96
97private:
98
101
104};
105
106/*---------------------------------------------------------------------------*/
107/*---------------------------------------------------------------------------*/
108
109} // End namespace Arcane::AnyItem
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114#endif /* ARCANE_ANYITEM_ANYITEMLINKVARIABLEARRAY_H */
Arcane::UniqueArray< DataType > m_values
Valeurs.
DataType & operator[](const LinkFamily::LinkIndex &item)
Accesseur.
void notifyFamilyIsInvalidate()
Action si la famille est invalidée : on retaille.
DataType operator[](const LinkFamily::LinkIndex &item) const
Accesseur.
const LinkFamily m_family
Famille de liens.
void notifyFamilyIsReserved()
Action si la famille est reservée : on retaille.
Interface d'observeurs de famille de liaisons AnyItem.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Famille de liens AnyItem (pattern flyweight)
Integer capacity() const
retourne la capacité
void registerObserver(ILinkFamilyObserver &observer) const
Enrgistre un observeur de la famille.
void removeObserver(ILinkFamilyObserver &observer) const
Detruit un observeur de la famille.
void arcaneCallFunctionAndTerminateIfThrow(std::function< void()> function)