diff options
Diffstat (limited to '3rdparty/asmjit/src/asmjit/core/zonestring.h')
-rw-r--r-- | 3rdparty/asmjit/src/asmjit/core/zonestring.h | 81 |
1 files changed, 32 insertions, 49 deletions
diff --git a/3rdparty/asmjit/src/asmjit/core/zonestring.h b/3rdparty/asmjit/src/asmjit/core/zonestring.h index cb25b29ce7d..e62ac50f287 100644 --- a/3rdparty/asmjit/src/asmjit/core/zonestring.h +++ b/3rdparty/asmjit/src/asmjit/core/zonestring.h @@ -1,28 +1,10 @@ -// AsmJit - Machine code generation for C++ +// This file is part of AsmJit project <https://asmjit.com> // -// * Official AsmJit Home Page: https://asmjit.com -// * Official Github Repository: https://github.com/asmjit/asmjit -// -// Copyright (c) 2008-2020 The AsmJit Authors -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. +// See asmjit.h or LICENSE.md for license and copyright information +// SPDX-License-Identifier: Zlib -#ifndef ASMJIT_CORE_SMALLSTRING_H_INCLUDED -#define ASMJIT_CORE_SMALLSTRING_H_INCLUDED +#ifndef ASMJIT_CORE_ZONESTRING_H_INCLUDED +#define ASMJIT_CORE_ZONESTRING_H_INCLUDED #include "../core/globals.h" #include "../core/zone.h" @@ -32,10 +14,6 @@ ASMJIT_BEGIN_NAMESPACE //! \addtogroup asmjit_zone //! \{ -// ============================================================================ -// [asmjit::ZoneStringBase] -// ============================================================================ - //! A helper class used by \ref ZoneString implementation. struct ZoneStringBase { union { @@ -49,7 +27,7 @@ struct ZoneStringBase { }; }; - inline void reset() noexcept { + ASMJIT_INLINE_NODEBUG void reset() noexcept { _dummy = nullptr; _external = nullptr; } @@ -74,33 +52,39 @@ struct ZoneStringBase { } }; -// ============================================================================ -// [asmjit::ZoneString<N>] -// ============================================================================ - //! A string template that can be zone allocated. //! -//! Helps with creating strings that can be either statically allocated if they -//! are small, or externally allocated in case their size exceeds the limit. -//! The `N` represents the size of the whole `ZoneString` structure, based on +//! Helps with creating strings that can be either statically allocated if they are small, or externally allocated +//! in case their size exceeds the limit. The `N` represents the size of the whole `ZoneString` structure, based on //! that size the maximum size of the internal buffer is determined. template<size_t N> class ZoneString { public: - static constexpr uint32_t kWholeSize = - (N > sizeof(ZoneStringBase)) ? uint32_t(N) : uint32_t(sizeof(ZoneStringBase)); - static constexpr uint32_t kMaxEmbeddedSize = kWholeSize - 5; + //! \name Constants + //! \{ + + enum : uint32_t { + kWholeSize = (N > sizeof(ZoneStringBase)) ? uint32_t(N) : uint32_t(sizeof(ZoneStringBase)), + kMaxEmbeddedSize = kWholeSize - 5 + }; + + //! \} + + //! \name Members + //! \{ union { ZoneStringBase _base; char _wholeData[kWholeSize]; }; + //! \} + //! \name Construction & Destruction //! \{ - inline ZoneString() noexcept { reset(); } - inline void reset() noexcept { _base.reset(); } + ASMJIT_INLINE_NODEBUG ZoneString() noexcept { reset(); } + ASMJIT_INLINE_NODEBUG void reset() noexcept { _base.reset(); } //! \} @@ -108,22 +92,21 @@ public: //! \{ //! Tests whether the string is empty. - inline bool empty() const noexcept { return _base._size == 0; } + ASMJIT_INLINE_NODEBUG bool empty() const noexcept { return _base._size == 0; } //! Returns the string data. - inline const char* data() const noexcept { return _base._size <= kMaxEmbeddedSize ? _base._embedded : _base._external; } + ASMJIT_INLINE_NODEBUG const char* data() const noexcept { return _base._size <= kMaxEmbeddedSize ? _base._embedded : _base._external; } //! Returns the string size. - inline uint32_t size() const noexcept { return _base._size; } + ASMJIT_INLINE_NODEBUG uint32_t size() const noexcept { return _base._size; } //! Tests whether the string is embedded (e.g. no dynamically allocated). - inline bool isEmbedded() const noexcept { return _base._size <= kMaxEmbeddedSize; } + ASMJIT_INLINE_NODEBUG bool isEmbedded() const noexcept { return _base._size <= kMaxEmbeddedSize; } //! Copies a new `data` of the given `size` to the string. //! - //! If the `size` exceeds the internal buffer the given `zone` will be - //! used to duplicate the data, otherwise the internal buffer will be - //! used as a storage. - inline Error setData(Zone* zone, const char* data, size_t size) noexcept { + //! If the `size` exceeds the internal buffer the given `zone` will be used to duplicate the data, otherwise + //! the internal buffer will be used as a storage. + ASMJIT_INLINE_NODEBUG Error setData(Zone* zone, const char* data, size_t size) noexcept { return _base.setData(zone, kMaxEmbeddedSize, data, size); } @@ -134,4 +117,4 @@ public: ASMJIT_END_NAMESPACE -#endif // ASMJIT_CORE_SMALLSTRING_H_INCLUDED +#endif // ASMJIT_CORE_ZONESTRING_H_INCLUDED |