14#include "arcane/utils/StringBuilder.h"
15#include "arcane/utils/FatalErrorException.h"
16#include "arcane/utils/PlatformUtils.h"
19#include "arcane/core/ItemGroupImpl.h"
20#include "arcane/core/ItemGroup.h"
21#include "arcane/core/GroupIndexTable.h"
38, m_group_impl(group_impl)
43 ARCANE_ASSERT((m_group_impl), (
"ItemGroupImpl pointer null"));
45 m_disable_check_integrity = platform::getEnvironmentVariable(
"ARCANE_ENABLE_GROUPINDEXTABLE_CHECKINTEGRITY").null();
56 m_view.m_key_buffer_span = m_key_buffer;
57 m_view.m_next_buffer_span = m_next_buffer;
58 m_view.m_buckets_span = m_buckets;
59 m_view.m_nb_bucket = m_nb_bucket;
68 ItemGroup group(m_group_impl);
70 const Integer group_size = group.size();
71 m_nb_bucket = this->nearestPrimeNumber(2 * group_size);
72 m_buckets.resize(m_nb_bucket);
74 m_key_buffer.resize(group_size);
75 m_next_buffer.resize(group_size);
79 const Integer index = item.index();
80 const KeyTypeConstRef key = item->localId();
81 const Integer bucket = _hash(key);
82 ARCANE_ASSERT((_lookupBucket(bucket, key) < 0), (
"Already assigned key"));
83 m_key_buffer[index] = key;
84 m_next_buffer[index] = m_buckets[bucket];
85 m_buckets[bucket] = index;
88 ARCANE_ASSERT((_checkIntegrity()), (
"GroupIndexTable integrity failed"));
95compact(
const Int32ConstArrayView* infos)
100 ARCANE_ASSERT((m_group_impl->size() == m_key_buffer.size()), (
"Inconsistent sizes"));
107 ItemGroup group(m_group_impl);
110 const KeyTypeConstRef key = iitem.localId();
111 const Integer i = iitem.index();
112 const KeyTypeConstRef old_key = m_key_buffer[iitem.index()];
113 const Integer bucket = _hash(key);
114 ARCANE_ASSERT((_lookupBucket(bucket, key) < 0), (
"Already assigned key"));
115 ARCANE_ASSERT((infos == NULL || (*infos)[old_key] == key), (
"Inconsistent reorder translation %d vs %d vs %d", (*infos)[old_key], key, old_key));
116 m_key_buffer[i] = key;
117 m_next_buffer[i] = m_buckets[bucket];
118 m_buckets[bucket] = i;
120 ARCANE_ASSERT((_checkIntegrity()), (
"GroupIndexTable integrity failed"));
129bool GroupIndexTable::
130_hasKey(KeyTypeConstRef
id)
const
134 if (m_key_buffer[i] ==
id)
143bool GroupIndexTable::
152bool GroupIndexTable::
153_checkIntegrity(
bool full)
const
155 bool integrity =
true;
156 if (m_group_impl->size() != m_key_buffer.size()) {
158 b +=
"GroupIndexTable BAD DATA size : group size=";
159 b += m_group_impl->size();
160 b +=
" vs data size=";
161 b += m_key_buffer.size();
171 const Integer hd = item.index();
172 if (m_key_buffer[hd] != item.localId() || !
_hasKey(item.localId())) {
174 b +=
"GroupIndexTable BAD DATA at ";
178 b += m_key_buffer[hd];
Fonctions de gestion mémoire et des allocateurs.
Exception lorsqu'une erreur fatale est survenue.
bool m_disable_check_integrity
Tableau des buckets.
UniqueArray< Int32 > m_buckets
Table des index suivant associés.
bool _hasKey(KeyTypeConstRef id) const
true si une valeur avec la clé id est présente
Int32 _hash(KeyTypeConstRef id) const
Fonction de hachage.
UniqueArray< Int32 > m_next_buffer
Table des clés associées.
Classe de base d'une table de hachage simple pour les entités.
Implémentation d'un groupe d'entités de maillage.
Groupe d'entités de maillage.
Constructeur de chaîne de caractère unicode.
String toString() const
Retourne la chaîne de caractères construite.
Espace de noms pour les fonctions de gestion mémoire et des allocateurs.
IMemoryAllocator * getDefaultDataAllocator()
Allocateur par défaut pour les données.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.