array: add varray wrapper
This commit is contained in:
parent
07c4715082
commit
7511580de7
@ -223,6 +223,7 @@ list (
|
|||||||
array/sarray.hpp
|
array/sarray.hpp
|
||||||
array/parray.cpp
|
array/parray.cpp
|
||||||
array/parray.hpp
|
array/parray.hpp
|
||||||
|
array/varray.hpp
|
||||||
ascii.hpp
|
ascii.hpp
|
||||||
backtrace.hpp
|
backtrace.hpp
|
||||||
bezier.cpp
|
bezier.cpp
|
||||||
|
75
array/varray.hpp
Normal file
75
array/varray.hpp
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*
|
||||||
|
* Copyright 2019 Danny Robson <danny@nerdcruft.net>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../debug.hpp"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
#include <cstddef>
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
namespace cruft {
|
||||||
|
/// A view of a compile-time sized array.
|
||||||
|
///
|
||||||
|
/// \tparam S the number of elements
|
||||||
|
/// \tparam T the data type of the elements
|
||||||
|
template <std::size_t S, typename T>
|
||||||
|
class varray {
|
||||||
|
public:
|
||||||
|
using iterator_category = std::random_access_iterator_tag;
|
||||||
|
using value_type = T;
|
||||||
|
using reference_type = T&;
|
||||||
|
using pointer = T*;
|
||||||
|
using difference_type = std::size_t;
|
||||||
|
using size_type = std::size_t;
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
varray (varray const &rhs)
|
||||||
|
: m_data (rhs.m_data)
|
||||||
|
{ ; }
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
varray (std::array<T,S> &rhs)
|
||||||
|
: m_data (std::data (rhs))
|
||||||
|
{ ; }
|
||||||
|
|
||||||
|
varray (std::array<T,S> &&) = delete;
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
varray (T (&_data)[S])
|
||||||
|
: m_data (_data)
|
||||||
|
{ ; }
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
|
std::size_t size (void) const { return S; }
|
||||||
|
|
||||||
|
T& operator[] (std::size_t i) { CHECK_LIMIT (i, 0u, S); return m_data[i]; }
|
||||||
|
const T& operator[] (std::size_t i) const { CHECK_LIMIT (i, 0u, S); return m_data[i]; }
|
||||||
|
|
||||||
|
auto data (void) { return m_data; }
|
||||||
|
auto data (void) const { return m_data; }
|
||||||
|
|
||||||
|
auto begin (void) { return data (); }
|
||||||
|
auto end (void) { return data () + size (); }
|
||||||
|
|
||||||
|
auto begin (void) const { return data (); }
|
||||||
|
auto end (void) const { return data () + size (); }
|
||||||
|
|
||||||
|
auto cbegin (void) const { return data (); }
|
||||||
|
auto cend (void) const { return data () + size (); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
T *m_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename T, std::size_t S>
|
||||||
|
varray (T(&)[S]) -> varray<S,T>;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user