12#ifndef ARCANE_MESH_ITEMINTERNALMAP_H
13#define ARCANE_MESH_ITEMINTERNALMAP_H
17#include "arcane/utils/HashTableMap.h"
18#include "arcane/utils/CheckedConvert.h"
20#include "arcane/mesh/MeshGlobal.h"
21#include "arcane/core/ItemInternal.h"
22#include "arcane/utils/HashTableMap2.h"
68#ifdef ARCANE_USE_HASHTABLEMAP2_FOR_ITEMINTERNALMAP
69 static constexpr bool UseNewImpl = 1;
71 static constexpr bool UseNewImpl = 0;
86 m_legacy_data->setValue(v);
100 , m_value(d->value())
102 NewImpl::iterator m_iter;
109 using Data ARCANE_DEPRECATED_REASON(
"Y2024: Data type is internal to Arcane") = LegacyImpl::Data;
131 if constexpr (UseNewImpl)
132 return m_new_impl.insert(std::make_pair(key, v)).
second;
134 return m_impl.add(key, v);
140 if constexpr (UseNewImpl)
141 return m_new_impl.clear();
143 return m_impl.clear();
149 if constexpr (UseNewImpl)
150 return CheckedConvert::toInt32(m_new_impl.size());
152 return m_impl.count();
162 if constexpr (UseNewImpl) {
163 auto x = m_new_impl.find(key);
164 if (x == m_new_impl.end())
175 if constexpr (UseNewImpl)
176 return (m_new_impl.find(key) != m_new_impl.end());
178 return m_impl.hasKey(key);
184 if constexpr (UseNewImpl) {
196 void notifyUniqueIdsChanged();
210 template <
class Lambda>
void
213 if constexpr (UseNewImpl) {
214 for (
auto [key, value] : m_new_impl)
219 for (Int32
k = 0, n =
b.size();
k < n; ++
k) {
230 if constexpr (UseNewImpl)
231 return CheckedConvert::toInt32(m_new_impl.bucket_count());
233 return m_impl.buckets().size();
241 if constexpr (UseNewImpl) {
242 auto x = m_new_impl.find(key);
246 const BaseData* d = m_impl.lookup(key);
253 if constexpr (UseNewImpl) {
254 auto x = m_new_impl.find(key);
255 return (x != m_new_impl.end()) ? x->second->localId() : NULL_ITEM_LOCAL_ID;
258 const BaseData* d = m_impl.lookup(key);
259 return (d ? d->value()->localId() : NULL_ITEM_LOCAL_ID);
270 if constexpr (UseNewImpl) {
271 auto x = m_new_impl.find(uid);
272 if (x == m_new_impl.end())
287 if constexpr (UseNewImpl) {
288 auto x = m_new_impl.find(uid);
289 if (x == m_new_impl.end())
291 return x->second->localId();
294 return m_impl.lookupValue(uid)->localId();
297 void checkValid()
const;
301 ARCANE_DEPRECATED_REASON(
"Y2024: This method is internal to Arcane")
302 Data* lookup(Int64 key)
304 if constexpr (UseNewImpl) {
305 _throwNotSupported(
"lookup");
308 return m_impl.lookup(key);
311 ARCANE_DEPRECATED_REASON(
"Y2024: This method is internal to Arcane")
312 const Data* lookup(
Int64 key)
const
314 if constexpr (UseNewImpl) {
315 _throwNotSupported(
"lookup");
318 return m_impl.lookup(key);
321 ARCANE_DEPRECATED_REASON(
"Y2024: This method is internal to Arcane")
322 ConstArrayView<BaseData*> buckets()
const
324 if constexpr (UseNewImpl) {
325 _throwNotSupported(
"buckets");
328 return m_impl.buckets();
331 ARCANE_DEPRECATED_REASON(
"This method is internal to Arcane")
332 BaseData* lookupAdd(
Int64 id, ItemInternal* value,
bool& is_add)
334 if constexpr (UseNewImpl) {
335 _throwNotSupported(
"lookupAdd(id,value,is_add)");
338 return m_impl.lookupAdd(
id, value, is_add);
341 ARCANE_DEPRECATED_REASON(
"Y2024: This method is internal to Arcane")
342 BaseData* lookupAdd(
Int64 uid)
344 if constexpr (UseNewImpl) {
345 _throwNotSupported(
"lookupAdd(uid)");
348 return m_impl.lookupAdd(uid);
351 ARCANE_DEPRECATED_REASON(
"Y2024: Use findItem() instead")
352 ItemInternal* lookupValue(
Int64 uid)
const
354 if constexpr (UseNewImpl) {
355 _throwNotSupported(
"lookupValue");
358 return m_impl.lookupValue(uid);
361 ARCANE_DEPRECATED_REASON(
"Y2024: Use findItem() instead")
362 ItemInternal* operator[](
Int64 uid)
const
364 if constexpr (UseNewImpl) {
365 _throwNotSupported(
"operator[]");
368 return m_impl.lookupValue(uid);
382 void _changeLocalIds(ArrayView<ItemInternal*> items_internal,
383 ConstArrayView<Int32> old_to_new_local_ids);
385 LookupData _lookupAdd(
Int64 id, ItemInternal* value,
bool& is_add)
387 if constexpr (UseNewImpl) {
388 auto x = m_new_impl.insert(std::make_pair(
id, value));
390 return LookupData(x.first);
393 return LookupData(m_impl.lookupAdd(
id, value, is_add));
399 if constexpr (UseNewImpl) {
400 auto x = m_new_impl.find(key);
401 if (x == m_new_impl.end())
403 _checkValid(key, x->second);
407 const BaseData* d = m_impl.lookup(key);
408 return (d ? d->value() :
nullptr);
415 void _throwNotSupported ARCANE_NORETURN(
const char* func_name)
const;
427#define ENUMERATE_ITEM_INTERNAL_MAP_DATA(iter,item_list) \
428for( auto __i__##iter : item_list .buckets() ) \
429 for (auto* iter = __i__##iter; iter; iter = iter->next())
Classe de base pour les entités du maillage.
Structure interne d'une entité de maillage.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Infos de maillage pour un genre donné d'entité.
Tableau associatif de ItemInternal.
void remove(Int64 key)
Supprime la valeur associée à la clé key.
impl::ItemBase findItem(Int64 uid) const
Retourne l'entité de numéro unique uid.
void eachItem(const Lambda &lambda)
Fonction template pour itérer sur les entités de l'instance.
bool hasKey(Int64 key)
true si une valeur avec la clé id est présente
Int32 nbBucket() const
Nombre de buckets.
void resize(Int32 new_size, bool use_prime=false)
Redimensionne la table de hachage.
bool add(Int64 key, ItemInternal *v)
Ajoute la valeur v correspondant à la clé key.
impl::ItemBase tryFind(Int64 key) const
Retourne l'entité associée à key si trouvé ou l'entité nulle sinon.
Int32 tryFindLocalId(Int64 key) const
Retourne le localId() associé à key si trouvé ou NULL_ITEM_LOCAL_ID sinon aucun.
Int32 findLocalId(Int64 uid) const
Retourne le numéro local de l'entité de numéro unique uid.
Int32 count() const
Nombre d'éléments de la table.
ItemInternal * _tryFindItemInternal(Int64 key) const
Retourne l'entité associée à key si trouvé ou nullptr sinon.
void clear()
Supprime tous les éléments de la table.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-