85 lines
2.3 KiB
C++
85 lines
2.3 KiB
C++
//
|
|
// 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_
|