#ifndef BOOST_MP_DETAIL_DYNAMIC_ARRAY_HPP
#define BOOST_MP_DETAIL_DYNAMIC_ARRAY_HPP
+#include <algorithm>
+#include <cstddef>
+#include <cstdint>
#include <vector>
+
#include <boost/multiprecision/detail/rebind.hpp>
namespace boost { namespace multiprecision { namespace backends { namespace detail {
-template <class value_type, const boost::uint32_t elem_number, class my_allocator>
-struct dynamic_array : public std::vector<value_type, typename rebind<value_type, my_allocator>::type>
+template <class ValueType, const std::uint32_t ElemNumber, class my_allocator>
+struct dynamic_array : public std::vector<ValueType, typename rebind<ValueType, my_allocator>::type>
{
- dynamic_array() : std::vector<value_type, typename rebind<value_type, my_allocator>::type>(static_cast<typename std::vector<value_type, typename rebind<value_type, my_allocator>::type>::size_type>(elem_number), static_cast<value_type>(0))
+private:
+ using base_class_type = std::vector<ValueType, typename rebind<ValueType, my_allocator>::type>;
+
+public:
+ dynamic_array()
+ : base_class_type(static_cast<typename base_class_type::size_type>(ElemNumber),
+ static_cast<typename base_class_type::value_type>(0u)) { }
+
+ dynamic_array(std::initializer_list<std::uint32_t> lst)
+ : base_class_type(static_cast<typename base_class_type::size_type>(ElemNumber),
+ static_cast<typename base_class_type::value_type>(0u))
{
+ std::copy(lst.begin(),
+ lst.begin() + (std::min)(std::size_t(lst.size()), std::size_t(ElemNumber)),
+ data());
}
- value_type* data() { return &(*(this->begin())); }
- const value_type* data() const { return &(*(this->begin())); }
+ typename base_class_type::value_type* data() { return &(*(this->begin())); }
+ const typename base_class_type::value_type* data() const { return &(*(this->begin())); }
};
}}}} // namespace boost::multiprecision::backends::detail