Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
SmallArray.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* SmallArray.h (C) 2000-2025 */
9/* */
10/* Tableau 1D de données avec buffer pré-alloué. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_STACKARRAY_H
13#define ARCANE_UTILS_STACKARRAY_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Array.h"
18#include "arcane/utils/MemoryAllocator.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane::impl
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
38class ARCANE_UTILS_EXPORT StackMemoryAllocator final
39: public IMemoryAllocator3
40{
41 public:
42
43 StackMemoryAllocator(void* buf, size_t size)
44 : m_preallocated_buffer(buf)
45 , m_preallocated_size(size)
46 {}
47
48 public:
49
50 bool hasRealloc(MemoryAllocationArgs) const final { return true; }
51 AllocatedMemoryInfo allocate(MemoryAllocationArgs args, Int64 new_size) final;
53 void deallocate(MemoryAllocationArgs args, AllocatedMemoryInfo ptr) final;
54 Int64 adjustedCapacity(MemoryAllocationArgs, Int64 wanted_capacity, Int64) const final { return wanted_capacity; }
55 size_t guarantedAlignment(MemoryAllocationArgs) const final { return 0; }
56
57 private:
58
59 void* m_preallocated_buffer = nullptr;
60 Int64 m_preallocated_size = 0;
61};
62
63} // namespace Arcane::impl
64
65/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
67
68namespace Arcane
69{
70
71/*---------------------------------------------------------------------------*/
72/*---------------------------------------------------------------------------*/
86template <typename T, Int32 NbElement = 32>
88: public Array<T>
89{
91 static constexpr Int32 SizeOfType = static_cast<Int32>(sizeof(T));
92 static constexpr Int32 nb_element_in_buf = NbElement;
93
94 public:
95
96 using typename BaseClassType::ConstReferenceType;
97 static constexpr Int32 MemorySize = NbElement * SizeOfType;
98
99 public:
100
103 : m_stack_allocator(m_stack_buffer, MemorySize)
104 {
105 this->_initFromAllocator(&m_stack_allocator, nb_element_in_buf);
106 }
107
109 SmallArray(Int64 req_size, ConstReferenceType value)
110 : SmallArray()
111 {
112 this->_resize(req_size, value);
113 }
114
116 explicit SmallArray(Int64 asize)
117 : SmallArray()
118 {
119 this->_resize(asize);
120 }
121
123 explicit SmallArray(Int32 asize)
124 : SmallArray((Int64)asize)
125 {
126 }
127
129 explicit SmallArray(size_t asize)
130 : SmallArray((Int64)asize)
131 {
132 }
133
136 : SmallArray(Span<const T>(aview))
137 {
138 }
139
142 : SmallArray()
143 {
144 this->_initFromSpan(aview);
145 }
146
149 : SmallArray(Span<const T>(aview))
150 {
151 }
152
155 : SmallArray(Span<const T>(aview))
156 {
157 }
158
159 SmallArray(std::initializer_list<T> alist)
160 : SmallArray()
161 {
162 this->_initFromInitializerList(alist);
163 }
164
167 : SmallArray(rhs.constSpan())
168 {
169 }
170
172 void operator=(const Array<T>& rhs)
173 {
174 this->copy(rhs.constSpan());
175 }
176
179 {
180 this->copy(rhs);
181 }
182
184 void operator=(const Span<T>& rhs)
185 {
186 this->copy(rhs);
187 }
188
191 {
192 this->copy(rhs);
193 }
194
197 {
198 this->copy(rhs);
199 }
200
202 ~SmallArray() override
203 {
204 // Il faut détruire explicitement car notre allocateur
205 // sera détruit avant la classe de base et ne sera plus valide
206 // lors de la désallocation.
207 this->_destroy();
208 this->_internalDeallocate();
209 this->_reset();
210 }
211
212 public:
213
214 template <Int32 N> SmallArray(SmallArray<T, N>&& rhs) = delete;
215 template <Int32 N> SmallArray<T, NbElement> operator=(SmallArray<T, N>&& rhs) = delete;
216
217 private:
218
219 char m_stack_buffer[MemorySize];
220 impl::StackMemoryAllocator m_stack_allocator;
221};
222
223/*---------------------------------------------------------------------------*/
224/*---------------------------------------------------------------------------*/
225
226} // namespace Arcane
227
228/*---------------------------------------------------------------------------*/
229/*---------------------------------------------------------------------------*/
230
231#endif
Tableau d'items de types quelconques.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Tableau 1D de données avec buffer pré-alloué sur la pile.
Definition SmallArray.h:89
SmallArray(Int64 asize)
Créé un tableau de asize éléments contenant la valeur par défaut du type T()
Definition SmallArray.h:116
void operator=(const Span< const T > &rhs)
Copie les valeurs de la vue rhs dans cette instance.
Definition SmallArray.h:196
SmallArray(Int32 asize)
Créé un tableau de asize éléments contenant la valeur par défaut du type T()
Definition SmallArray.h:123
void operator=(const Span< T > &rhs)
Copie les valeurs de la vue rhs dans cette instance.
Definition SmallArray.h:184
void operator=(const Array< T > &rhs)
Copie les valeurs de rhs dans cette instance.
Definition SmallArray.h:172
void operator=(const ConstArrayView< T > &rhs)
Copie les valeurs de la vue rhs dans cette instance.
Definition SmallArray.h:190
SmallArray()
Créé un tableau vide.
Definition SmallArray.h:102
SmallArray(size_t asize)
Créé un tableau de asize éléments contenant la valeur par défaut du type T()
Definition SmallArray.h:129
SmallArray(const Span< T > &aview)
Créé un tableau en recopiant les valeurs de la value aview.
Definition SmallArray.h:154
SmallArray(const ArrayView< T > &aview)
Créé un tableau en recopiant les valeurs de la value aview.
Definition SmallArray.h:148
void operator=(const ArrayView< T > &rhs)
Copie les valeurs de la vue rhs dans cette instance.
Definition SmallArray.h:178
SmallArray(const Array< T > &rhs)
Créé un tableau en recopiant les valeurs rhs.
Definition SmallArray.h:166
SmallArray(Int64 req_size, ConstReferenceType value)
Créé un tableau de size éléments contenant la valeur value.
Definition SmallArray.h:109
~SmallArray() override
Détruit l'instance.
Definition SmallArray.h:202
SmallArray(const Span< const T > &aview)
Créé un tableau en recopiant les valeurs de la value aview.
Definition SmallArray.h:141
SmallArray(const ConstArrayView< T > &aview)
Créé un tableau en recopiant les valeurs de la value aview.
Definition SmallArray.h:135
Allocateur avec buffer pré-alloué.
Definition SmallArray.h:40
size_t guarantedAlignment(MemoryAllocationArgs) const final
Valeur de l'alignement garanti par l'allocateur.
Definition SmallArray.h:55
bool hasRealloc(MemoryAllocationArgs) const final
Indique si l'allocateur supporte la sémantique de realloc.
Definition SmallArray.h:50
Informations sur une zone mémoire allouée.
Classe contenant des informations pour spécialiser les allocations.
Vue d'un tableau d'éléments de type T.
Definition Span.h:510
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-