SpectMorph
Main Page
Classes
Files
File List
lib
smalignedarray.hh
1
// Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html
2
3
#ifndef SPECTMORPH_ALIGNED_ARRAY_HH
4
#define SPECTMORPH_ALIGNED_ARRAY_HH
5
6
#include <glib.h>
7
#include "smutils.hh"
8
9
namespace
SpectMorph
10
{
11
12
/* --- memory utils --- */
13
void
* malloc_aligned (
size_t
total_size,
14
size_t
alignment,
15
uint8 **free_pointer);
16
17
template
<
class
T,
int
ALIGN>
18
class
AlignedArray
{
19
unsigned
char
*unaligned_mem;
20
T *data;
21
size_t
n_elements;
22
void
23
allocate_aligned_data()
24
{
25
g_assert ((ALIGN %
sizeof
(T)) == 0);
26
data =
reinterpret_cast<
T *
>
(malloc_aligned (n_elements *
sizeof
(T), ALIGN, &unaligned_mem));
27
}
28
public
:
29
AlignedArray
(
size_t
n_elements) :
30
n_elements (n_elements)
31
{
32
allocate_aligned_data();
33
for
(
size_t
i = 0; i < n_elements; i++)
34
new
(data + i) T();
35
}
36
~
AlignedArray
()
37
{
38
/* C++ destruction order: last allocated element is deleted first */
39
while
(n_elements)
40
data[--n_elements].~T();
41
g_free (unaligned_mem);
42
}
43
T&
44
operator[] (
size_t
pos)
45
{
46
return
data[pos];
47
}
48
const
T&
49
operator[] (
size_t
pos)
const
50
{
51
return
data[pos];
52
}
53
size_t
size ()
const
54
{
55
return
n_elements;
56
}
57
};
58
59
}
60
61
#endif
/* SPECTMORPH_ALIGNED_ARRAY_HH */
SpectMorph
Definition:
smalignedarray.cc:7
SpectMorph::AlignedArray
Definition:
smalignedarray.hh:18
Generated on Tue Jun 20 2017 15:43:14 for SpectMorph by
1.8.11