12#ifndef ARCANE_UTILS_LISTIMPL_H
13#define ARCANE_UTILS_LISTIMPL_H
17#include "arcane/utils/CollectionImpl.h"
18#include "arcane/utils/Enumerator.h"
19#include "arcane/utils/UniqueArray.h"
30extern "C" ARCANE_UTILS_EXPORT
void throwOutOfRangeException();
31extern "C" ARCANE_UTILS_EXPORT
void throwNullReference();
52 typedef const T& ObjectRef;
122 return m_array.data();
127 return m_array.data() + this->
count();
130 const_iterator
begin()
const override
132 return m_array.data();
137 return m_array.data() + this->
count();
143 return const_cast<T*
>(m_array.data());
155 template <
class Function> Function
170 m_array.reserve(new_capacity);
181 return m_array.capacity();
193 void add(ObjectRef elem)
override
196 Integer s = this->
count();
198 this->_setCount(s + 1);
202 bool remove(ObjectRef element)
override
205 Integer s = this->
count();
207 if (m_array[i] == element) {
211 throwOutOfRangeException();
215 void removeAt(Integer index)
override
219 throwOutOfRangeException();
226 for (Int32 i = 0; i < s; ++i)
227 if (m_array[i] == element)
232 bool contains(ObjectRef element)
const override
238 EnumeratorImplBase*
enumerator()
const override;
242 void _removeAt(Integer index)
246 T* remove_ob = ptr + index;
248 m_array.remove(index);
249 this->_setCount(s - 1);
261 m_array.resize(new_size);
262 this->_setCount(new_size);
267 Integer _capacity()
const
269 return m_array.capacity();
274 void _arrayCopy(
const ListImplBase<T>& array)
276 _arrayCopy(array.begin2(), array.count());
278 void _arrayCopy(
const ConstArrayView<T>& array)
280 _arrayCopy(array.data(), array.size());
282 void _arrayCopy(
const ArrayView<T>& array)
284 _arrayCopy(array.data(), array.size());
286 void _arrayCopy(
const T* from_ptr, Integer from_size)
288 if (from_size == 0) {
292 m_array.copy(ConstArrayView<T>(from_size, from_ptr));
293 this->_setCount(from_size);
309 return m_array.data();
312 inline const T*
_ptr()
const
314 return m_array.data();
319 UniqueArray<T> m_array;
343 this->_arrayCopy(array);
347 this->_arrayCopy(array);
352 this->_arrayCopy(array);
405 , m_current(begin - 1)
411 void reset()
override { m_current = m_begin - 1; }
415 return m_current < m_end;
417 void*
current()
override {
return m_current; }
418 const void*
current()
const override {
return m_current; }
virtual void onRemove()
Evènement envoyé avant de supprimer un élément.
Integer count() const
Retourne le nombre d'éléments de la collection.
virtual void onInsert()
Evènement envoyé avant d'insérer un élément.
virtual void onClear()
Evènement envoyé avant de supprimer tous les éléments.
virtual void onRemoveComplete(void *object, Integer position)
Evènement envoyé après supression d'un élément.
virtual void onInsertComplete(void *object, Integer position)
Evènement envoyé après insertion d'un élément.
virtual void onClearComplete()
Evènement envoyé lorsque tous les éléments ont été supprimés.
Classe de base d'une collection fortement typée.
EnumeratorT< T > Enumerator
Type d'un itérateur sur toute la collection.
void * current() override
Objet courant de l'énumérateur.
const void * current() const override
Objet courant de l'énumérateur.
bool moveNext() override
Avance l'énumérateur sur l'élément suivant de la collection.
void reset() override
Remet à zéro l'énumérateur.
value_type & reference
Type référence d'un élément du tableau.
const value_type * const_iterator
Type de l'itérateur constant sur un élément du tableau.
void reserve(Integer new_capacity)
Signale qu'il faut réserver de la mémoire pour new_capacity éléments Il s'agit juste d'une indication...
value_type * iterator
Type de l'itérateur sur un élément du tableau.
T value_type
Type des éléments du tableau.
const value_type * const_pointer
Type pointeur constant d'un élément du tableau.
T & operator[](Integer i)
i-ème élément du tableau.
const T & operator[](Integer i) const
i-ème élément du tableau.
void clear() override
Supprime tous les éléments de la collection.
ConstIterT< ListImplBase< T > > const_iter
Type d'un itérateur constant sur tout le tableau.
iterator begin() override
Retourne un iterateur sur le premier élément du tableau.
iterator end() override
Retourne un iterateur sur le premier élément après la fin du tableau.
Integer capacity() const
Retourne le nombre d'éléments alloués du tableau.
void assign(const ListImplBase< T > &s)
Recopie le tableau s.
void add(ObjectRef elem) override
Ajoute l'élément elem à la fin du tableau.
void resize(Integer new_size)
Modifie la taille du tableau. new_size est le nouveau nombre d'éléments du tableau.
const_iterator end() const override
Retourne un iterateur constant sur le premier élément après la fin du tableau.
T * _ptr()
Retourne un pointeur sur le tableau.
T * begin2() const override
Retourne un iterateur sur le premier élément du tableau.
void assign(const ArrayView< T > &s)
Recopie le tableau s.
const value_type & const_reference
Type référence constante d'un élément du tableau.
value_type * pointer
Type pointeur d'un élément du tableau.
IterT< ListImplBase< T > > iter
Type d'un itérateur sur tout le tableau.
const_iterator begin() const override
Retourne un iterateur constant sur le premier élément du tableau.
Function each(Function f)
Applique le fonctor f à tous les éléments du tableau.
EnumeratorImplBase * enumerator() const override
Retourne un énumérateur générique sur la collection.
ListImplBase()=default
Construit un tableau vide.
T * end2() const override
Retourne un iterateur sur le premier élément après la fin du tableau.
void assign(const ConstArrayView< T > &s)
Recopie le tableau s.
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.