]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/multiprecision/detail/dynamic_array.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / boost / multiprecision / detail / dynamic_array.hpp
index 3613fb88668ed4783a7cb228296a21dae07c17f8..35714b2fe427cb13d544010eb029349f7bddbc77 100644 (file)
@@ -8,19 +8,36 @@
 #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