@@ -67,6 +67,7 @@ class MultiArray2
67
67
public:
68
68
69
69
MultiArray2 () = default ;
70
+ // TODO: Rendre accessible uniquement à UniqueMultiArray2 ou SharedMultiArray2
70
71
explicit MultiArray2 (ConstArrayView<Int32> sizes)
71
72
{
72
73
_resize (sizes);
@@ -96,6 +97,17 @@ class MultiArray2
96
97
, m_sizes(aview.m_sizes)
97
98
{
98
99
}
100
+ explicit MultiArray2 (const MemoryAllocationOptions& allocation_options)
101
+ : m_buffer(allocation_options)
102
+ , m_indexes(allocation_options)
103
+ , m_sizes(allocation_options)
104
+ {}
105
+ // TODO: Rendre accessible uniquement à UniqueMultiArray2 ou SharedMultiArray2
106
+ MultiArray2 (const MemoryAllocationOptions& allocation_options, ConstArrayView<Int32> sizes)
107
+ : MultiArray2(allocation_options)
108
+ {
109
+ _resize (sizes);
110
+ }
99
111
100
112
public:
101
113
@@ -111,23 +123,15 @@ class MultiArray2
111
123
public:
112
124
113
125
// ! Nombre total d'éléments
114
- Integer totalNbElement () const { return m_buffer.size (); }
126
+ Int32 totalNbElement () const { return m_buffer.size (); }
127
+
115
128
// ! Supprime les éléments du tableau.
116
129
void clear ()
117
130
{
118
131
m_buffer.clear ();
119
132
m_indexes.clear ();
120
133
m_sizes.clear ();
121
134
}
122
- // ! Clone le tableau
123
- MultiArray2<DataType> clone ()
124
- {
125
- MultiArray2<DataType> new_array;
126
- new_array.m_buffer = m_buffer.clone ();
127
- new_array.m_indexes = m_indexes.clone ();
128
- new_array.m_sizes = m_sizes.clone ();
129
- return new_array;
130
- }
131
135
// ! Remplit les éléments du tableau avec la valeur \a v
132
136
void fill (const DataType& v)
133
137
{
@@ -137,7 +141,7 @@ class MultiArray2
137
141
{
138
142
return m_buffer[m_indexes[i] + j];
139
143
}
140
- const DataType& at (Integer i, Integer j) const
144
+ ConstReferenceType at (Integer i, Integer j) const
141
145
{
142
146
return m_buffer[m_indexes[i] + j];
143
147
}
@@ -178,6 +182,24 @@ class MultiArray2
178
182
return ConstMultiArray2View<DataType>(m_buffer, m_indexes, m_sizes);
179
183
}
180
184
185
+ // ! Vue modifiable du tableau
186
+ MultiArray2SmallSpan<DataType> span ()
187
+ {
188
+ return { m_buffer.smallSpan (), m_indexes, m_sizes };
189
+ }
190
+
191
+ // ! Vue constante du tableau
192
+ MultiArray2SmallSpan<const DataType> span () const
193
+ {
194
+ return { m_buffer, m_indexes, m_sizes };
195
+ }
196
+
197
+ // ! Vue constante du tableau
198
+ MultiArray2SmallSpan<const DataType> constSpan () const
199
+ {
200
+ return { m_buffer.constSmallSpan (), m_indexes, m_sizes };
201
+ }
202
+
181
203
// ! Vue du tableau sous forme de tableau 1D
182
204
ArrayView<DataType> viewAsArray ()
183
205
{
@@ -233,7 +255,7 @@ class MultiArray2
233
255
234
256
Integer old_size1 = m_indexes.size ();
235
257
236
- SharedArray<DataType> new_buffer (total_size);
258
+ SharedArray<DataType> new_buffer (m_buffer. allocationOptions (), total_size);
237
259
238
260
// Recopie dans le nouveau tableau les valeurs de l'ancien.
239
261
if (old_size1 > size1)
@@ -278,7 +300,7 @@ class MultiArray2
278
300
279
301
private:
280
302
281
- // ! Valeurs
303
+ // ! Tableau des Valeurs
282
304
SharedArray<DataType> m_buffer;
283
305
// ! Tableau des indices dans \a m_buffer du premièr élément de la deuxième dimension
284
306
SharedArray<Int32> m_indexes;
@@ -361,6 +383,16 @@ class UniqueMultiArray2
361
383
explicit UniqueMultiArray2 (ConstArrayView<Int32> sizes)
362
384
: MultiArray2<DataType>(sizes)
363
385
{}
386
+ explicit UniqueMultiArray2 (IMemoryAllocator* allocator)
387
+ : UniqueMultiArray2(MemoryAllocationOptions(allocator))
388
+ {}
389
+ explicit UniqueMultiArray2 (const MemoryAllocationOptions& allocation_options)
390
+ : MultiArray2<DataType>(allocation_options)
391
+ {}
392
+ UniqueMultiArray2 (const MemoryAllocationOptions& allocation_options,
393
+ ConstArrayView<Int32> sizes)
394
+ : MultiArray2<DataType>(allocation_options, sizes)
395
+ {}
364
396
UniqueMultiArray2 (ConstMultiArray2View<DataType> view)
365
397
: MultiArray2<DataType>(view)
366
398
{}
0 commit comments