VirtualBox

source: vbox/trunk/include/iprt/nocrt/memory

Last change on this file was 98103, checked in by vboxsync, 17 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.1 KB
Line 
1/** @file
2 * IPRT / No-CRT - Minimal C++ std::memory.
3 */
4
5/*
6 * Copyright (C) 2022-2023 Oracle and/or its affiliates.
7 *
8 * This file is part of VirtualBox base platform packages, as
9 * available from https://www.virtualbox.org.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation, in version 3 of the
14 * License.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, see <https://www.gnu.org/licenses>.
23 *
24 * The contents of this file may alternatively be used under the terms
25 * of the Common Development and Distribution License Version 1.0
26 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
27 * in the VirtualBox distribution, in which case the provisions of the
28 * CDDL are applicable instead of those of the GPL.
29 *
30 * You may elect to license modified versions of this file under the
31 * terms and conditions of either the GPL or the CDDL or both.
32 *
33 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
34 */
35
36#ifndef VBOX_INCLUDED_SRC_nocrt_memory
37#define VBOX_INCLUDED_SRC_nocrt_memory
38#ifndef RT_WITHOUT_PRAGMA_ONCE
39# pragma once
40#endif
41
42#include <iprt/nocrt/cstddef>
43#include <iprt/nocrt/new>
44
45namespace std
46{
47 /**
48 * Simple allocator - not C++11 compliant.
49 */
50 template<class a_Type> class allocator
51 {
52 public:
53 typedef a_Type value_type;
54 typedef a_Type const &const_reference;
55 typedef a_Type *pointer;
56 typedef a_Type const *const_pointer;
57 typedef std::size_t size_type;
58 typedef std::ptrdiff_t difference_type;
59
60 public:
61 allocator() RT_NOEXCEPT
62 { }
63
64 allocator(allocator const &a_rThat) RT_NOEXCEPT
65 { RT_NOREF(a_rThat); }
66
67 ~allocator()
68 { }
69
70 a_Type *allocate(size_type a_cItems, const void *a_pvHint = NULL)
71 {
72 RT_NOREF(a_pvHint);
73 Assert(a_cItems <= max_size()); /** @todo throw stuff */
74 return static_cast<pointer>(::operator new(sizeof(value_type) * a_cItems));
75 }
76
77 void deallocate(a_Type *a_paItems, size_type a_cItems)
78 {
79 if (a_paItems && a_cItems > 0)
80 ::operator delete(a_paItems);
81 }
82
83 size_type max_size() const
84 {
85 /* whatever */
86#if ARCH_BITS >= 64
87 return _4G / sizeof(value_type);
88#else
89 return _512M / sizeof(value_type);
90#endif
91 }
92
93 void construct(pointer a_pDst, const_reference a_rSrc)
94 {
95 ::new (static_cast<void *>(a_pDst)) a_Type(a_rSrc);
96 }
97
98 void destroy(pointer a_pDst)
99 {
100 a_pDst->~value_type();
101 }
102 };
103
104 /** @todo make_unique and unique */
105}
106
107#endif /* !VBOX_INCLUDED_SRC_nocrt_memory */
108
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use