Arcane  v3.14.10.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-2023 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-2023 */
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 IMemoryAllocator
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() const final;
51 void* allocate(size_t new_size) final;
52 void* reallocate(void* current_ptr, size_t new_size) final;
53 void deallocate(void* ptr) final;
54 size_t adjustCapacity(size_t wanted_capacity, size_t) final
55 {
56 return wanted_capacity;
57 }
58 size_t guarantedAlignment() final { return 0; }
59
60 private:
61
62 void* m_preallocated_buffer = nullptr;
63 size_t m_preallocated_size = 0;
64};
65
66} // namespace Arcane::impl
67
68/*---------------------------------------------------------------------------*/
69/*---------------------------------------------------------------------------*/
70
71namespace Arcane
72{
73
74/*---------------------------------------------------------------------------*/
75/*---------------------------------------------------------------------------*/
89template <typename T, Int32 NbElement = 32>
91: public Array<T>
92{
94 static constexpr Int32 SizeOfType = static_cast<Int32>(sizeof(T));
95 static constexpr Int32 nb_element_in_buf = NbElement;
96
97 public:
98
99 using typename BaseClassType::ConstReferenceType;
100 static constexpr Int32 MemorySize = NbElement * SizeOfType;
101
102 public:
103
106 : m_stack_allocator(m_stack_buffer, MemorySize)
107 {
108 this->_initFromAllocator(&m_stack_allocator, nb_element_in_buf);
109 }
110
112 SmallArray(Int64 req_size, ConstReferenceType value)
113 : SmallArray()
114 {
115 this->_resize(req_size, value);
116 }
117
119 explicit SmallArray(Int64 asize)
120 : SmallArray()
121 {
122 this->_resize(asize);
123 }
124
126 explicit SmallArray(Int32 asize)
127 : SmallArray((Int64)asize)
128 {
129 }
130
132 explicit SmallArray(size_t asize)
133 : SmallArray((Int64)asize)
134 {
135 }
136
139 : SmallArray(Span<const T>(aview))
140 {
141 }
142
145 : SmallArray()
146 {
147 this->_initFromSpan(aview);
148 }
149
152 : SmallArray(Span<const T>(aview))
153 {
154 }
155
158 : SmallArray(Span<const T>(aview))
159 {
160 }
161
162 SmallArray(std::initializer_list<T> alist)
163 : SmallArray()
164 {
165 this->_initFromInitializerList(alist);
166 }
167
170 : SmallArray(rhs.constSpan())
171 {
172 }
173
175 void operator=(const Array<T>& rhs)
176 {
177 this->copy(rhs.constSpan());
178 }
179
182 {
183 this->copy(rhs);
184 }
185
187 void operator=(const Span<T>& rhs)
188 {
189 this->copy(rhs);
190 }
191
194 {
195 this->copy(rhs);
196 }
197
200 {
201 this->copy(rhs);
202 }
203
205 ~SmallArray() override
206 {
207 // Il faut détruire explicitement car notre allocateur
208 // sera détruit avant la classe de base et ne sera plus valide
209 // lors de la désallocation.
210 this->_destroy();
211 this->_internalDeallocate();
212 this->_reset();
213 }
214
215 public:
216
217 template <Int32 N> SmallArray(SmallArray<T, N>&& rhs) = delete;
218 template <Int32 N> SmallArray<T, NbElement> operator=(SmallArray<T, N>&& rhs) = delete;
219
220 private:
221
222 char m_stack_buffer[MemorySize];
223 impl::StackMemoryAllocator m_stack_allocator;
224};
225
226/*---------------------------------------------------------------------------*/
227/*---------------------------------------------------------------------------*/
228
229} // namespace Arcane
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
233
234#endif
Tableau d'items de types quelconques.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Tableau 1D de données avec buffer pré-alloué sur la pile.
Definition SmallArray.h:92
SmallArray(Int64 asize)
Créé un tableau de asize éléments contenant la valeur par défaut du type T()
Definition SmallArray.h:119
void operator=(const Span< const T > &rhs)
Copie les valeurs de la vue rhs dans cette instance.
Definition SmallArray.h:199
SmallArray(Int32 asize)
Créé un tableau de asize éléments contenant la valeur par défaut du type T()
Definition SmallArray.h:126
void operator=(const Span< T > &rhs)
Copie les valeurs de la vue rhs dans cette instance.
Definition SmallArray.h:187
void operator=(const Array< T > &rhs)
Copie les valeurs de rhs dans cette instance.
Definition SmallArray.h:175
void operator=(const ConstArrayView< T > &rhs)
Copie les valeurs de la vue rhs dans cette instance.
Definition SmallArray.h:193
SmallArray()
Créé un tableau vide.
Definition SmallArray.h:105
SmallArray(size_t asize)
Créé un tableau de asize éléments contenant la valeur par défaut du type T()
Definition SmallArray.h:132
SmallArray(const Span< T > &aview)
Créé un tableau en recopiant les valeurs de la value aview.
Definition SmallArray.h:157
SmallArray(const ArrayView< T > &aview)
Créé un tableau en recopiant les valeurs de la value aview.
Definition SmallArray.h:151
void operator=(const ArrayView< T > &rhs)
Copie les valeurs de la vue rhs dans cette instance.
Definition SmallArray.h:181
SmallArray(const Array< T > &rhs)
Créé un tableau en recopiant les valeurs rhs.
Definition SmallArray.h:169
SmallArray(Int64 req_size, ConstReferenceType value)
Créé un tableau de size éléments contenant la valeur value.
Definition SmallArray.h:112
~SmallArray() override
Détruit l'instance.
Definition SmallArray.h:205
SmallArray(const Span< const T > &aview)
Créé un tableau en recopiant les valeurs de la value aview.
Definition SmallArray.h:144
SmallArray(const ConstArrayView< T > &aview)
Créé un tableau en recopiant les valeurs de la value aview.
Definition SmallArray.h:138
Allocateur avec buffer pré-alloué.
Definition SmallArray.h:40
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 -*-