14#include "arcane/mesh/IncrementalItemConnectivity.h"
16#include "arcane/utils/StringBuilder.h"
17#include "arcane/utils/ArgumentException.h"
18#include "arcane/utils/PlatformUtils.h"
20#include "arcane/core/IMesh.h"
21#include "arcane/core/IItemFamily.h"
22#include "arcane/core/ConnectivityItemVector.h"
24#include "arcane/core/ObserverPool.h"
25#include "arcane/core/Properties.h"
26#include "arcane/core/IndexedItemConnectivityView.h"
27#include "arcane/core/internal/IDataInternal.h"
28#include "arcane/core/internal/IItemFamilyInternal.h"
29#include "arcane/core/internal/IIncrementalItemConnectivityInternal.h"
31#include "arcane/mesh/IndexedItemConnectivityAccessor.h"
42IndexedItemConnectivityAccessor::
43IndexedItemConnectivityAccessor(IndexedItemConnectivityViewBase view, IItemFamily* target_item_family)
44: IndexedItemConnectivityViewBase(view)
45, m_item_shared_info(target_item_family->_internalApi()->commonItemSharedInfo())
51IndexedItemConnectivityAccessor::
52IndexedItemConnectivityAccessor(IIncrementalItemConnectivity* connectivity)
53: m_item_shared_info(connectivity->targetFamily()->_internalApi()->commonItemSharedInfo())
55 auto* ptr =
dynamic_cast<mesh::IncrementalItemConnectivityBase*
>(connectivity);
57 IndexedItemConnectivityViewBase::set(ptr->connectivityView()) ;
63AbstractIncrementalItemConnectivity::
64AbstractIncrementalItemConnectivity(IItemFamily* source_family,
65 IItemFamily* target_family,
66 const String& connectivity_name)
67: TraceAccessor(source_family->traceMng())
68, m_source_family(source_family)
69, m_target_family(target_family)
70, m_name(connectivity_name)
72 m_families.add(m_source_family);
73 m_families.add(m_target_family);
76 source_family->_internalApi()->addSourceConnectivity(
this);
77 target_family->_internalApi()->addTargetConnectivity(
this);
86 return Arccore::makeRef<IIncrementalItemSourceConnectivity>(
this);
95 return Arccore::makeRef<IIncrementalItemTargetConnectivity>(
this);
113 m_connectivity_nb_item_array(m_connectivity_nb_item_variable._internalTrueData()->_internalDeprecatedValue()),
114 m_connectivity_index_array(m_connectivity_index_variable._internalTrueData()->_internalDeprecatedValue()),
115 m_connectivity_list_array(m_connectivity_list_variable._internalTrueData()->_internalDeprecatedValue())
121 m_connectivity_nb_item_variable.addTag(
tag_name,
"1");
122 m_connectivity_index_variable.addTag(
tag_name,
"1");
123 m_connectivity_list_variable.addTag(
tag_name,
"1");
145 Int32 m_max_nb_item = 0;
149 Integer size()
const {
return m_connectivity_nb_item_array.size(); }
151 bool isAllocated()
const {
return size()>0; }
153 void _checkResize(Int32
lid)
156 Integer size = m_connectivity_nb_item_array.size();
160 Integer capacity = m_connectivity_nb_item_array.capacity();
165 Integer reserve_size = 1000;
166 while (lid>reserve_size){
169 m_connectivity_nb_item_array.reserve(reserve_size);
170 m_connectivity_index_array.reserve(reserve_size);
172 m_connectivity_nb_item_array.resize(wanted_size);
173 m_connectivity_index_array.resize(wanted_size);
176 void reserveForItems(
Int32 capacity)
178 m_connectivity_nb_item_array.reserve(capacity);
179 m_connectivity_index_array.reserve(capacity);
200 void shrinkMemory()
override {
return m_internal_api->_shrinkMemory(); }
203 m_internal_api->_addMemoryInfos(
mem_info);
214IncrementalItemConnectivityBase::
218, m_internal_api(std::
make_unique<InternalApi>(this))
231 m_p->m_observers.addObserver(
this,&ThatClass::_notifyConnectivityNbItemChangedFromObservable,
232 m_p->m_connectivity_nb_item_variable.variable()->readObservable());
234 m_p->m_observers.addObserver(
this,&ThatClass::_notifyConnectivityIndexChanged,
235 m_p->m_connectivity_index_variable.variable()->readObservable());
237 m_p->m_observers.addObserver(
this,&ThatClass::_notifyConnectivityListChanged,
238 m_p->m_connectivity_list_variable.variable()->readObservable());
243 _notifyConnectivityListChanged();
244 _notifyConnectivityIndexChanged();
251IncrementalItemConnectivityBase::
252~IncrementalItemConnectivityBase()
266 m_p->reserveForItems(n);
267 _notifyConnectivityIndexChanged();
268 _notifyConnectivityNbItemChanged();
274 _notifyConnectivityListChanged();
282void IncrementalItemConnectivityBase::
283_notifyConnectivityListChanged()
285 m_connectivity_list = m_p->m_connectivity_list_array.view();
286 if (m_item_connectivity_list)
293void IncrementalItemConnectivityBase::
294_notifyConnectivityIndexChanged()
296 m_connectivity_index = m_p->m_connectivity_index_array.view();
297 if (m_item_connectivity_list)
304void IncrementalItemConnectivityBase::
305_notifyConnectivityNbItemChanged()
307 m_connectivity_nb_item = m_p->m_connectivity_nb_item_array.view();
308 if (m_item_connectivity_list)
315void IncrementalItemConnectivityBase::
316_setMaxNbConnectedItemsInConnectivityList()
318 if (m_item_connectivity_list)
331 _notifyConnectivityNbItemChanged();
332 _computeMaxNbConnectedItem();
338void IncrementalItemConnectivityBase::
339_setNewMaxNbConnectedItems(Int32
new_max)
343 _setMaxNbConnectedItemsInConnectivityList();
350void IncrementalItemConnectivityBase::
351_computeMaxNbConnectedItem()
355 Int32 max_nb_item = 0;
356 for(
Int32 x : m_connectivity_nb_item )
359 _setNewMaxNbConnectedItems(max_nb_item);
383 info(4) <<
"setItemConnectivityList name=" <<
name() <<
" ilist=" <<
ilist <<
" index=" << index;
384 m_item_connectivity_list =
ilist;
385 m_item_connectivity_index = index;
386 _notifyConnectivityListChanged();
387 _notifyConnectivityIndexChanged();
388 _notifyConnectivityNbItemChanged();
389 _setMaxNbConnectedItemsInConnectivityList();
398 if(m_p->isAllocated()){
401 _notifyConnectivityNbItemChanged();
402 _notifyConnectivityIndexChanged();
413 const Integer n = ids.size();
414 for( Integer i=0; i<n; ++i )
415 if (ids[i]!=NULL_ITEM_LOCAL_ID)
425 return con_items.resizeAndCopy(_connectedItemsLocalId(item));
432connectivityContainerView()
const
434 return { m_connectivity_list, m_connectivity_index, m_connectivity_nb_item };
440IndexedItemConnectivityViewBase IncrementalItemConnectivityBase::
441connectivityView()
const
443 return { connectivityContainerView(), _sourceFamily()->
itemKind(), _targetFamily()->
itemKind()};
449IndexedItemConnectivityAccessor IncrementalItemConnectivityBase::
450connectivityAccessor()
const
452 return IndexedItemConnectivityAccessor(connectivityView(),_targetFamily());
461 return m_internal_api.get();
467void IncrementalItemConnectivityBase::
470 info() <<
"Infos index=" << m_connectivity_index;
471 info() <<
"Infos nb_item=" << m_connectivity_nb_item;
472 info() <<
"Infos list=" << m_connectivity_list;
481IncrementalItemConnectivity::
488, m_pre_allocated_size(0)
490 m_pre_allocated_size = _sourceFamily()->
properties()->getIntegerWithDefault(
name()+
"PreallocSize",0);
491 info(4) <<
"PreallocSize1 var=" << m_p->m_var_name <<
" v=" << m_pre_allocated_size;
500IncrementalItemConnectivity::
501~IncrementalItemConnectivity()
503 info(4) <<
" connectivity name=" <<
name()
504 <<
" prealloc_size=" << m_pre_allocated_size
505 <<
" nb_add=" << m_nb_add
506 <<
" nb_remove=" << m_nb_remove
507 <<
" nb_memcopy=" << m_nb_memcopy;
513inline Integer IncrementalItemConnectivity::
514_increaseConnectivityList(
Int32 new_lid)
517 m_p->m_connectivity_list_array.add(new_lid);
518 _notifyConnectivityListChanged();
525inline Integer IncrementalItemConnectivity::
526_increaseConnectivityList(
Int32 new_lid,Integer nb_value)
529 m_p->m_connectivity_list_array.addRange(new_lid,nb_value);
530 _notifyConnectivityListChanged();
537void IncrementalItemConnectivity::
538_resetConnectivityList()
540 m_p->m_connectivity_list_array.clear();
541 _notifyConnectivityListChanged();
548void IncrementalItemConnectivity::
549_increaseIndexList(
Int32 lid,Integer size,
Int32 target_lid)
551 Integer added_range = (m_pre_allocated_size>0) ? m_pre_allocated_size : 1;
553 Integer pos_in_index = m_connectivity_index[lid];
554 Integer new_pos_in_list = _increaseConnectivityList(NULL_ITEM_LOCAL_ID,size+added_range);
555 ArrayView<Int32> current_list(size,&(m_connectivity_list[pos_in_index]));
556 ArrayView<Int32> new_list(size+1,&(m_connectivity_list[new_pos_in_list]));
557 new_list.copy(current_list);
560 new_list[size] = target_lid;
561 m_connectivity_index[lid] = new_pos_in_list;
573 Integer size = m_connectivity_nb_item[
lid];
583 if (m_pre_allocated_size!=0){
587 Integer
new_pos_in_list = _increaseConnectivityList(NULL_ITEM_LOCAL_ID,m_pre_allocated_size);
592 if (size<m_pre_allocated_size || (size%m_pre_allocated_size)!=0){
593 Integer index = m_connectivity_index[
lid];
610 ++(m_connectivity_nb_item[
lid]);
611 _setNewMaxNbConnectedItems(m_connectivity_nb_item[
lid]);
617Integer IncrementalItemConnectivity::
618_computeAllocSize(Integer
nb_item)
620 if (m_pre_allocated_size!=0){
624 return m_pre_allocated_size;
625 if ((
nb_item%m_pre_allocated_size)==0)
627 return m_pre_allocated_size * (
alloc_size + 1);
635void IncrementalItemConnectivity::
636addConnectedItems(ItemLocalId source_item,Integer nb_item)
638 const Int32 lid = source_item.localId();
639 Integer size = m_connectivity_nb_item[lid];
641 ARCANE_FATAL(
"source_item already have connected items");
642 Integer alloc_size = _computeAllocSize(nb_item);
643 Integer new_pos_in_list = _increaseConnectivityList(NULL_ITEM_LOCAL_ID,alloc_size);
644 m_connectivity_index[lid] = new_pos_in_list;
645 m_connectivity_nb_item[lid] += nb_item;
646 _setNewMaxNbConnectedItems(m_connectivity_nb_item[lid]);
667 m_connectivity_nb_item[
lid] = 0;
679 Integer size = m_connectivity_nb_item[
lid];
680 Int32* items = &(m_connectivity_list[ m_connectivity_index[
lid] ]);
682 --(m_connectivity_nb_item[
lid]);
693 ARCANE_CHECK_AT(index,m_connectivity_nb_item[
lid]);
694 m_connectivity_list[ m_connectivity_index[
lid] + index ] =
target_lid;
706 ARCANE_CHECK_AT(n - 1, m_connectivity_nb_item[
lid]);
707 const Int32
pos = m_connectivity_index[
lid];
708 for (Integer i = 0; i < n; ++i)
733 Int32
lid = item.localId();
734 m_p->_checkResize(
lid);
735 _notifyConnectivityIndexChanged();
736 _notifyConnectivityNbItemChanged();
738 m_connectivity_nb_item[
lid] = 0;
739 m_connectivity_index[
lid] = 0;
757 _notifyConnectivityIndexChanged();
758 _notifyConnectivityNbItemChanged();
761 m_connectivity_nb_item[
lid] = 0;
762 m_connectivity_index[
lid] = 0;
772 m_pre_allocated_size = _sourceFamily()->
properties()->getIntegerWithDefault(
name()+
"PreallocSize",0);
773 info(4) <<
"PreallocSize2 var=" << m_p->m_var_name <<
" v=" << m_pre_allocated_size;
785 if (m_pre_allocated_size<0)
787 String::format(
"Invalid prealloc_size v={0}",
795 if (m_connectivity_nb_item.
size()!=0)
804 _resetConnectivityList();
813 Int64
mem1 = m_p->m_connectivity_list_array.capacity();
814 Int64
mem2 = m_p->m_connectivity_index_array.capacity();
815 Int64
mem3 = m_p->m_connectivity_nb_item_array.capacity();
819 out <<
" connectiviy name=" <<
name()
820 <<
" prealloc_size=" << m_pre_allocated_size
821 <<
" nb_add=" << m_nb_add
822 <<
" nb_remove=" << m_nb_remove
823 <<
" nb_memcopy=" << m_nb_memcopy
824 <<
" list_size=" << m_connectivity_list.
size()
825 <<
" list_capacity=" <<
mem1
826 <<
" index_size=" << m_connectivity_index.
size()
827 <<
" index_capacity=" <<
mem2
828 <<
" nb_item_size=" << m_connectivity_nb_item.
size()
829 <<
" nb_item_capacity=" <<
mem3
836void IncrementalItemConnectivityBase::
839 m_p->m_connectivity_list_array.shrink();
840 m_p->m_connectivity_index_array.shrink();
841 m_p->m_connectivity_nb_item_array.shrink();
842 _notifyConnectivityIndexChanged();
843 _notifyConnectivityNbItemChanged();
844 _notifyConnectivityListChanged();
850void IncrementalItemConnectivityBase::
853 Int64
s1 = m_p->m_connectivity_list_array.size();
854 Int64
s2 = m_p->m_connectivity_index_array.size();
855 Int64
s3 = m_p->m_connectivity_nb_item_array.size();
858 Int64
c1 = m_p->m_connectivity_list_array.capacity();
859 Int64
c2 = m_p->m_connectivity_index_array.capacity();
860 Int64
c3 = m_p->m_connectivity_nb_item_array.capacity();
867void IncrementalItemConnectivity::
874 if (m_connectivity_list.
size()==0){
875 if (m_pre_allocated_size>0){
876 _increaseConnectivityList(NULL_ITEM_LOCAL_ID,m_pre_allocated_size);
879 _increaseConnectivityList(NULL_ITEM_LOCAL_ID);
900 info(4) <<
"Begin Compacting IncrementalItemConnectivity name=" <<
name()
901 <<
" new_size=" << m_connectivity_list.
size()
902 <<
" prealloc_size=" << m_pre_allocated_size;
909 m_p->m_connectivity_list_array.clear();
910 _notifyConnectivityListChanged();
914 for( Integer i=0; i<
nb_item; ++i ){
916 Int32 nb = m_connectivity_nb_item[
lid];
918 m_connectivity_index[
lid] = 0;
921 Int32 index = m_connectivity_index[
lid];
931 ARCANE_FATAL(
"Bad position i={0} pos={1} pre_alloc_size={2} modulo={3}",
934 m_p->m_connectivity_list_array.addRange(
con_list);
937 m_p->m_connectivity_list_array.addRange(NULL_ITEM_LOCAL_ID,
alloc_size-nb);
938 if (m_pre_allocated_size==0 && nb==0)
939 m_connectivity_index[
lid] = 0;
941 _notifyConnectivityListChanged();
942 _computeMaxNbConnectedItem();
943 info(4) <<
"Compacting IncrementalItemConnectivity name=" <<
name()
945 <<
" new_size=" << m_connectivity_list.
size()
946 <<
" prealloc_size=" << m_pre_allocated_size;
958OneItemIncrementalItemConnectivity::
963 info(4) <<
"Using fixed OneItem connectivity for name=" <<
name();
969OneItemIncrementalItemConnectivity::
970~OneItemIncrementalItemConnectivity()
981 Integer size = m_connectivity_nb_item[
lid];
983 ARCANE_FATAL(
"source_item already have connected items");
986 m_connectivity_nb_item[
lid] = 1;
987 _setNewMaxNbConnectedItems(1);
997 m_connectivity_nb_item[
lid] = 0;
1008 Integer size = m_connectivity_nb_item[
lid];
1013 ARCANE_FATAL(
"source_item is not connected to item with wanted_lid={0} current_lid={1}",
1015 m_connectivity_nb_item[
lid] = 0;
1016 m_connectivity_list[
lid] = NULL_ITEM_LOCAL_ID;
1043 ARCANE_FATAL(
"Invalid size for target_list. value={0} (expected 1)",n);
1063void OneItemIncrementalItemConnectivity::
1064_checkResizeConnectivityList()
1072 Integer capacity = m_p->m_connectivity_list_array.capacity();
1074 m_p->m_connectivity_list_array.reserve(m_p->m_connectivity_nb_item_array.capacity());
1076 m_p->m_connectivity_list_array.resize(
wanted_size);
1077 _notifyConnectivityListChanged();
1086 Int32
lid = item.localId();
1087 m_p->_checkResize(
lid);
1088 _notifyConnectivityIndexChanged();
1089 _notifyConnectivityNbItemChanged();
1090 _checkResizeConnectivityList();
1092 m_connectivity_nb_item[
lid] = 0;
1093 m_connectivity_index[
lid] =
lid;
1094 m_connectivity_list[
lid] = NULL_ITEM_LOCAL_ID;
1111 _notifyConnectivityNbItemChanged();
1117 _notifyConnectivityListChanged();
1121 m_p->m_connectivity_index_array.resize(m_connectivity_nb_item.
size());
1122 _notifyConnectivityIndexChanged();
1139 size_t allocated_size = m_p->m_connectivity_list_array.capacity()
1140 + m_p->m_connectivity_index_array.capacity()
1141 + m_p->m_connectivity_nb_item_array.capacity();
1144 out <<
" connectiviy name=" <<
name()
1145 <<
" list_size=" << m_connectivity_list.
size()
1146 <<
" index_size=" << m_connectivity_index.
size()
1147 <<
" nb_item_size=" << m_connectivity_nb_item.
size()
1154void OneItemIncrementalItemConnectivity::
1155compactConnectivityList()
1157 _computeMaxNbConnectedItem();
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Fonctions utilitaires sur le maillage.
Tableau d'items de types quelconques.
Gère la récupération des informations de connectivité.
API interne à Arcane de IIncrementalItemConnectivity.
virtual Integer preAllocatedSize() const =0
Nombre d'entités pré-alloués pour la connectivité de chaque entité
Interface d'une famille d'entités.
virtual eItemKind itemKind() const =0
Genre des entités.
virtual Properties * properties()=0
Propriétés associées à cette famille.
virtual void compact(Int32ConstArrayView new_to_old_ids)=0
Compacte les valeurs de la variable.
Vues sur les conteneurs contenant les connectivités. Cette classe permet de rendre opaque en dehors d...
Informations sur l'utilisation mémoire pour les connectivités.
Informations de connectivité, pour une famille d'entité, permettant la transition entre les anciennes...
void _setConnectivityNbItem(Int32 item_kind, ConstArrayView< Int32 > v)
Positionne le tableau contenant le nombre d'entités connectées.
void _setConnectivityList(Int32 item_kind, ConstArrayView< Int32 > v)
Positionne le tableau contenant la liste des connectivités.
void _setConnectivityIndex(Int32 item_kind, ConstArrayView< Int32 > v)
Positionne le tableau d'index des connectivités.
void _setMaxNbConnectedItem(Int32 item_kind, Int32 v)
Positionne le nombre maximum d'entités connectées.
Index d'un Item dans une variable.
Vue sur un vecteur d'entités.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Paramètres nécessaires à la construction d'une variable.
IVariable * variable() const
Variable associée.
Classe abstraite de gestion des connectivités.
String name() const final
Nom de la connectivité
void addMemoryInfos(ItemConnectivityMemoryInfo &mem_info) override
Ajoute mem_info les informations mémoire de l'instance.
void shrinkMemory() override
Réduit au minimum l'utilisation mémoire pour les connectivités.
Classe de base pour les connectivités incrémentales item->item[].
void notifySourceFamilyLocalIdChanged(Int32ConstArrayView new_to_old_ids) override
Notifie la connectivité que la famille source est compactée.
void _notifyConnectivityNbItemChangedFromObservable()
Int32 maxNbConnectedItem() const override
Nombre maximum d'entités connectées à une entité source.
void setItemConnectivityList(ItemInternalConnectivityList *ilist, Int32 index)
Indique que cette connectivité est associée à une des connectivités de ItemInternal.
void reserveMemoryForNbSourceItems(Int32 n, bool pre_alloc_connectivity) override
Réserve la mémoire pour n entités sources.
ItemVectorView _connectedItems(ItemLocalId item, ConnectivityItemVector &con_items) const final
Remplit con_items avec les entités connectées à item.
IIncrementalItemConnectivityInternal * _internalApi() override
API interne à Arcane.
void notifyTargetFamilyLocalIdChanged(Int32ConstArrayView old_to_new_ids) override
Notifie la connectivité que la famille cible est compactée.
Int32 m_max_nb_item
Nombre maximum d'entités connectées.
bool hasConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id) const override
Test l'existence d'un connectivité entre source_item et l'entité de localId() target_local_id.
void setConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids) override
Alloue et positionne les entités connectées à source_item.
void compactConnectivityList()
Compacte la liste des connectivités.
void removeConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id) override
Supprime l'entité de localId() target_local_id à la connectivité de source_item.
void notifySourceItemAdded(ItemLocalId item) override
Notifie la connectivité qu'une entité a été ajoutée à la famille source.
void addConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id) override
Ajoute l'entité de localId() target_local_id à la connectivité de source_item.
void removeConnectedItems(ItemLocalId source_item) override
Supprime toute les entités connectées à source_item.
void notifyReadFromDump() override
Notifie la connectivité qu'on a effectué une relecture à partir d'une protection.
void dumpStats(std::ostream &out) const override
Sort sur le flot out des statistiques sur l'utilisation et la mémoire utilisée.
void replaceConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids) override
Remplace les entités de source_item par les entités de localId() target_local_ids.
void _internalNotifySourceItemsAdded(ConstArrayView< Int32 > local_ids) override
Notifie la connectivité que les entités items ont été ajoutées à la famille source.
void replaceConnectedItem(ItemLocalId source_item, Integer index, ItemLocalId target_local_id) override
Remplace l'entité d'index index de source_item par l'entité de localId() target_local_id.
void setPreAllocatedSize(Integer value) final
Positionne le nombre d'entités à pré-allouer pour la connectivité de chaque entité
void removeConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id) override
Supprime l'entité de localId() target_local_id à la connectivité de source_item.
void replaceConnectedItems(ItemLocalId source_item, Int32ConstArrayView target_local_ids) override
Remplace les entités de source_item par les entités de localId() target_local_ids.
void addConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id) override
Ajoute l'entité de localId() target_local_id à la connectivité de source_item.
void notifyReadFromDump() override
Notifie la connectivité qu'on a effectué une relecture à partir d'une protection.
bool hasConnectedItem(ItemLocalId source_item, ItemLocalId target_local_id) const override
Test l'existence d'un connectivité entre source_item et l'entité de localId() target_local_id.
void notifySourceFamilyLocalIdChanged(Int32ConstArrayView new_to_old_ids) override
Notifie la connectivité que la famille source est compactée.
void replaceConnectedItem(ItemLocalId source_item, Integer index, ItemLocalId target_local_id) override
Remplace l'entité d'index index de source_item par l'entité de localId() target_local_id.
void notifySourceItemAdded(ItemLocalId item) override
Notifie la connectivité qu'une entité a été ajoutée à la famille source.
void removeConnectedItems(ItemLocalId source_item) override
Supprime toute les entités connectées à source_item.
void dumpStats(std::ostream &out) const override
Sort sur le flot out des statistiques sur l'utilisation et la mémoire utilisée.
Exception lorsqu'un argument est invalide.
Vue modifiable d'un tableau d'un type T.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
Vue constante d'un tableau de type T.
Constructeur de chaîne de caractère unicode.
Chaîne de caractères unicode.
TraceMessage info() const
Flot pour un message d'information.
T max(const T &a, const T &b, const T &c)
Retourne le maximum de trois éléments.
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Int32 Integer
Type représentant un entier.