From f215e02bf85f68d3a6106c2a1f4f7f063f819064 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 11 Apr 2024 10:17:27 +0200 Subject: Adding upstream version 7.0.14-dfsg. Signed-off-by: Daniel Baumann --- include/iprt/nocrt/memory | 108 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 include/iprt/nocrt/memory (limited to 'include/iprt/nocrt/memory') diff --git a/include/iprt/nocrt/memory b/include/iprt/nocrt/memory new file mode 100644 index 00000000..77d4bcc7 --- /dev/null +++ b/include/iprt/nocrt/memory @@ -0,0 +1,108 @@ +/** @file + * IPRT / No-CRT - Minimal C++ std::memory. + */ + +/* + * Copyright (C) 2022-2023 Oracle and/or its affiliates. + * + * This file is part of VirtualBox base platform packages, as + * available from https://www.virtualbox.org. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, in version 3 of the + * License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * The contents of this file may alternatively be used under the terms + * of the Common Development and Distribution License Version 1.0 + * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included + * in the VirtualBox distribution, in which case the provisions of the + * CDDL are applicable instead of those of the GPL. + * + * You may elect to license modified versions of this file under the + * terms and conditions of either the GPL or the CDDL or both. + * + * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0 + */ + +#ifndef VBOX_INCLUDED_SRC_nocrt_memory +#define VBOX_INCLUDED_SRC_nocrt_memory +#ifndef RT_WITHOUT_PRAGMA_ONCE +# pragma once +#endif + +#include +#include + +namespace std +{ + /** + * Simple allocator - not C++11 compliant. + */ + template class allocator + { + public: + typedef a_Type value_type; + typedef a_Type const &const_reference; + typedef a_Type *pointer; + typedef a_Type const *const_pointer; + typedef std::size_t size_type; + typedef std::ptrdiff_t difference_type; + + public: + allocator() RT_NOEXCEPT + { } + + allocator(allocator const &a_rThat) RT_NOEXCEPT + { RT_NOREF(a_rThat); } + + ~allocator() + { } + + a_Type *allocate(size_type a_cItems, const void *a_pvHint = NULL) + { + RT_NOREF(a_pvHint); + Assert(a_cItems <= max_size()); /** @todo throw stuff */ + return static_cast(::operator new(sizeof(value_type) * a_cItems)); + } + + void deallocate(a_Type *a_paItems, size_type a_cItems) + { + if (a_paItems && a_cItems > 0) + ::operator delete(a_paItems); + } + + size_type max_size() const + { + /* whatever */ +#if ARCH_BITS >= 64 + return _4G / sizeof(value_type); +#else + return _512M / sizeof(value_type); +#endif + } + + void construct(pointer a_pDst, const_reference a_rSrc) + { + ::new (static_cast(a_pDst)) a_Type(a_rSrc); + } + + void destroy(pointer a_pDst) + { + a_pDst->~value_type(); + } + }; + + /** @todo make_unique and unique */ +} + +#endif /* !VBOX_INCLUDED_SRC_nocrt_memory */ + -- cgit v1.2.3