123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- //
- // 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_
|