libstdc++
aligned_buffer.h
Go to the documentation of this file.
1
// Aligned memory buffer -*- C++ -*-
2
3
// Copyright (C) 2013-2014 Free Software Foundation, Inc.
4
//
5
// This file is part of the GNU ISO C++ Library. This library is free
6
// software; you can redistribute it and/or modify it under the
7
// terms of the GNU General Public License as published by the
8
// Free Software Foundation; either version 3, or (at your option)
9
// any later version.
10
11
// This library is distributed in the hope that it will be useful,
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
// GNU General Public License for more details.
15
16
// Under Section 7 of GPL version 3, you are granted additional
17
// permissions described in the GCC Runtime Library Exception, version
18
// 3.1, as published by the Free Software Foundation.
19
20
// You should have received a copy of the GNU General Public License and
21
// a copy of the GCC Runtime Library Exception along with this program;
22
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23
// <http://www.gnu.org/licenses/>.
24
25
/** @file ext/aligned_buffer.h
26
* This file is a GNU extension to the Standard C++ Library.
27
*/
28
29
#ifndef _ALIGNED_BUFFER_H
30
#define _ALIGNED_BUFFER_H 1
31
32
#pragma GCC system_header
33
34
#if __cplusplus >= 201103L
35
# include <
type_traits
>
36
#else
37
# include <
bits/c++0x_warning.h
>
38
#endif
39
40
namespace
__gnu_cxx
41
{
42
template
<
typename
_Tp>
43
struct
__aligned_buffer
44
: std::aligned_storage<sizeof(_Tp), std::alignment_of<_Tp>::value>
45
{
46
typename
47
std::aligned_storage<sizeof(_Tp), std::alignment_of<_Tp>::value>::type
48
_M_storage;
49
50
void
*
51
_M_addr() noexcept
52
{
53
return
static_cast<
void
*
>
(&_M_storage);
54
}
55
56
const
void
*
57
_M_addr() const noexcept
58
{
59
return
static_cast<
const
void
*
>
(&_M_storage);
60
}
61
62
_Tp*
63
_M_ptr() noexcept
64
{
return
static_cast<
_Tp*
>
(_M_addr()); }
65
66
const
_Tp*
67
_M_ptr() const noexcept
68
{
return
static_cast<
const
_Tp*
>
(_M_addr()); }
69
};
70
71
}
// namespace
72
73
#endif
/* _ALIGNED_BUFFER_H */
type_traits
c++0x_warning.h
include
ext
aligned_buffer.h
Generated by
1.8.5