diff options
Diffstat (limited to 'thirdparty/raw_pdb/src/Foundation/PDB_ArrayView.h')
| -rw-r--r-- | thirdparty/raw_pdb/src/Foundation/PDB_ArrayView.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/thirdparty/raw_pdb/src/Foundation/PDB_ArrayView.h b/thirdparty/raw_pdb/src/Foundation/PDB_ArrayView.h new file mode 100644 index 000000000..3c462ee80 --- /dev/null +++ b/thirdparty/raw_pdb/src/Foundation/PDB_ArrayView.h @@ -0,0 +1,68 @@ +// Copyright 2011-2022, Molecular Matters GmbH <[email protected]> +// See LICENSE.txt for licensing details (2-clause BSD License: https://opensource.org/licenses/BSD-2-Clause) + +#pragma once + +#include "PDB_Macros.h" +#include "PDB_Assert.h" + + +namespace PDB +{ + // A read-only view into arrays of any type and length. + template <typename T> + class PDB_NO_DISCARD ArrayView + { + public: + // Constructs an array view from a C array with explicit length. + inline constexpr explicit ArrayView(const T* const array, size_t length) PDB_NO_EXCEPT + : m_data(array) + , m_length(length) + { + } + + PDB_DEFAULT_COPY_CONSTRUCTOR(ArrayView); + PDB_DEFAULT_MOVE_CONSTRUCTOR(ArrayView); + + // Provides read-only access to the underlying array. + PDB_NO_DISCARD inline constexpr const T* Decay(void) const PDB_NO_EXCEPT + { + return m_data; + } + + // Returns the length of the view. + PDB_NO_DISCARD inline constexpr size_t GetLength(void) const PDB_NO_EXCEPT + { + return m_length; + } + + // Returns the i-th element. + PDB_NO_DISCARD inline const T& operator[](size_t i) const PDB_NO_EXCEPT + { + PDB_ASSERT(i < GetLength(), "Index %zu out of bounds [0, %zu).", i, GetLength()); + return m_data[i]; + } + + + // ------------------------------------------------------------------------------------------------ + // Range-based for-loop support + // ------------------------------------------------------------------------------------------------ + + PDB_NO_DISCARD inline const T* begin(void) const PDB_NO_EXCEPT + { + return m_data; + } + + PDB_NO_DISCARD inline const T* end(void) const PDB_NO_EXCEPT + { + return m_data + m_length; + } + + private: + const T* const m_data; + const size_t m_length; + + PDB_DISABLE_MOVE_ASSIGNMENT(ArrayView); + PDB_DISABLE_COPY_ASSIGNMENT(ArrayView); + }; +} |