3 #include "../spl/memory.h"
\r
4 #include "../forward.h"
\r
6 #include <boost/any.hpp>
\r
11 FORWARD1(boost, template<typename> class shared_future);
\r
13 namespace caspar { namespace core {
\r
17 mutable_array(const mutable_array&);
\r
18 mutable_array& operator=(const mutable_array&);
\r
20 friend class const_array;
\r
27 template<typename T>
\r
28 explicit mutable_array(std::uint8_t* ptr, std::size_t size, T&& storage)
\r
31 , storage_(new boost::any(std::forward<T>(storage)))
\r
35 mutable_array(mutable_array&& other);
\r
39 mutable_array& operator=(mutable_array&& other);
\r
43 std::uint8_t* begin();
\r
44 std::uint8_t* data();
\r
45 std::uint8_t* end();
\r
46 const std::uint8_t* begin() const;
\r
47 const std::uint8_t* data() const;
\r
48 const std::uint8_t* end() const;
\r
49 std::size_t size() const;
\r
52 template<typename T>
\r
55 return boost::any_cast<T>(*storage_);
\r
60 std::unique_ptr<boost::any> storage_;
\r
71 template<typename T>
\r
72 explicit const_array(const std::uint8_t* ptr, std::size_t size, T&& storage)
\r
75 , storage_(new boost::any(std::forward<T>(storage)))
\r
79 const_array(const const_array& other);
\r
80 const_array(mutable_array&& other);
\r
84 const_array& operator=(const const_array& other);
\r
85 void swap(const_array& other);
\r
89 const std::uint8_t* begin() const;
\r
90 const std::uint8_t* data() const;
\r
91 const std::uint8_t* end() const;
\r
92 std::size_t size() const;
\r
95 template<typename T>
\r
98 return boost::any_cast<T>(*storage_);
\r
102 const std::uint8_t* ptr_;
\r
104 std::shared_ptr<boost::any> storage_;
\r