1/*
2 * Copyright Andrey Semashev 2007 - 2015.
3 * Distributed under the Boost Software License, Version 1.0.
4 * (See accompanying file LICENSE_1_0.txt or copy at
5 * http://www.boost.org/LICENSE_1_0.txt)
6 */
7/*!
8 * \file stateless_allocator.hpp
9 * \author Andrey Semashev
10 * \date 11.02.2012
11 *
12 * \brief This header is the Boost.Log library implementation, see the library documentation
13 * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html.
14 */
15
16#ifndef BOOST_LOG_STATELESS_ALLOCATOR_HPP_INCLUDED_
17#define BOOST_LOG_STATELESS_ALLOCATOR_HPP_INCLUDED_
18
19#include <boost/log/detail/config.hpp>
20#include <cstddef>
21#include <cstdlib>
22#include <memory>
23#include <boost/log/detail/header.hpp>
24
25#ifdef BOOST_HAS_PRAGMA_ONCE
26#pragma once
27#endif
28
29namespace boost {
30
31BOOST_LOG_OPEN_NAMESPACE
32
33namespace aux {
34
35#if defined(_STLPORT_VERSION)
36
37#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
38
39template< typename T >
40using stateless_allocator = std::allocator< T >;
41
42#else
43
44template< typename T >
45struct stateless_allocator :
46 public std::allocator< T >
47{
48};
49
50#endif
51
52#else
53
54template< typename T >
55struct stateless_allocator
56{
57 template< typename U >
58 struct rebind
59 {
60 typedef stateless_allocator< U > other;
61 };
62
63 typedef T value_type;
64 typedef value_type* pointer;
65 typedef value_type const* const_pointer;
66 typedef value_type& reference;
67 typedef value_type const& const_reference;
68 typedef std::size_t size_type;
69 typedef std::ptrdiff_t difference_type;
70
71 static pointer allocate(size_type n, const void* = NULL)
72 {
73 pointer p = static_cast< pointer >(std::malloc(size: n * sizeof(value_type)));
74 if (p)
75 return p;
76 else
77 throw std::bad_alloc();
78 }
79 static void deallocate(pointer p, size_type)
80 {
81 std::free(ptr: p);
82 }
83};
84
85#endif
86
87} // namespace aux
88
89BOOST_LOG_CLOSE_NAMESPACE // namespace log
90
91} // namespace boost
92
93#include <boost/log/detail/footer.hpp>
94
95#endif // BOOST_LOG_STATELESS_ALLOCATOR_HPP_INCLUDED_
96

source code of boost/libs/log/src/stateless_allocator.hpp