| // |
| // Copyright (c) 2018, Cem Bassoy, cem.bassoy@gmail.com |
| // |
| // Distributed under the Boost Software License, Version 1.0. (See |
| // accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| // |
| // The authors gratefully acknowledge the support of |
| // Fraunhofer IOSB, Ettlingen Germany |
| // |
| |
| |
| #ifndef _BOOST_STORAGE_TRAITS_HPP_ |
| #define _BOOST_STORAGE_TRAITS_HPP_ |
| |
| #include <vector> |
| #include <array> |
| |
| namespace boost { |
| namespace numeric { |
| namespace ublas { |
| |
| |
| template <class A> |
| struct storage_traits; |
| |
| |
| template <class V, class A> |
| struct storage_traits<std::vector<V,A>> |
| { |
| using array_type = std::vector<V,A>; |
| |
| using size_type = typename array_type::size_type; |
| using difference_type = typename array_type::difference_type; |
| using value_type = typename array_type::value_type; |
| |
| using reference = typename array_type::reference; |
| using const_reference = typename array_type::const_reference; |
| |
| using pointer = typename array_type::pointer; |
| using const_pointer = typename array_type::const_pointer; |
| |
| using iterator = typename array_type::iterator; |
| using const_iterator = typename array_type::const_iterator; |
| |
| using reverse_iterator = typename array_type::reverse_iterator; |
| using const_reverse_iterator = typename array_type::const_reverse_iterator; |
| |
| template<class U> |
| using rebind = std::vector<U, typename std::allocator_traits<A>::template rebind_alloc<U>>; |
| }; |
| |
| |
| template <class V, std::size_t N> |
| struct storage_traits<std::array<V,N>> |
| { |
| using array_type = std::array<V,N>; |
| |
| using size_type = typename array_type::size_type; |
| using difference_type = typename array_type::difference_type; |
| using value_type = typename array_type::value_type; |
| |
| using reference = typename array_type::reference; |
| using const_reference = typename array_type::const_reference; |
| |
| using pointer = typename array_type::pointer; |
| using const_pointer = typename array_type::const_pointer; |
| |
| using iterator = typename array_type::iterator; |
| using const_iterator = typename array_type::const_iterator; |
| |
| using reverse_iterator = typename array_type::reverse_iterator; |
| using const_reverse_iterator = typename array_type::const_reverse_iterator; |
| |
| template<class U> |
| using rebind = std::array<U,N>; |
| }; |
| |
| } // ublas |
| } // numeric |
| } // boost |
| |
| |
| #endif // _BOOST_STORAGE_TRAITS_HPP_ |