Skip to content

Commit

Permalink
Selectively copy
Browse files Browse the repository at this point in the history
  • Loading branch information
lindsayad committed Aug 15, 2019
1 parent f280545 commit e6c77f1
Showing 1 changed file with 35 additions and 2 deletions.
37 changes: 35 additions & 2 deletions src/utilities/include/metaphysicl/dynamic_std_array_wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@
namespace MetaPhysicL
{
template <typename T, typename NType>
struct DynamicStdArrayWrapper
class DynamicStdArrayWrapper
{
public:
static const std::size_t N = NType::size;

typedef std::size_t size_type;
Expand All @@ -45,6 +46,39 @@ struct DynamicStdArrayWrapper
typedef typename std::array<T, N>::reference reference;
typedef typename std::array<T, N>::const_reference const_reference;

DynamicStdArrayWrapper(const DynamicStdArrayWrapper & src)
{
_dynamic_n = src._dynamic_n;
metaphysicl_assert(_dynamic_n < N);
std::copy(src.begin(), src.end(), _data.begin());
}

// A std::array isn't movable
DynamicStdArrayWrapper(DynamicStdArrayWrapper && src)
{
_dynamic_n = src._dynamic_n;
metaphysicl_assert(_dynamic_n < N);
std::copy(src.begin(), src.end(), _data.begin());
}

DynamicStdArrayWrapper & operator=(const DynamicStdArrayWrapper & src)
{
_dynamic_n = src._dynamic_n;
metaphysicl_assert(_dynamic_n < N);
std::copy(src.begin(), src.end(), _data.begin());
return *this;
}

// A std::array isn't movable
DynamicStdArrayWrapper & operator=(DynamicStdArrayWrapper && src)
{
_dynamic_n = src._dynamic_n;
metaphysicl_assert(_dynamic_n < N);
std::copy(src.begin(), src.end(), _data.begin());
return *this;
}

DynamicStdArrayWrapper() = default;

iterator begin() { return _data.begin(); }

Expand Down Expand Up @@ -100,7 +134,6 @@ struct DynamicStdArrayWrapper

private:
std::array<T, N> _data;

std::size_t _dynamic_n = 0;
};

Expand Down

0 comments on commit e6c77f1

Please sign in to comment.