blob: 52840e9684c393358b0b805e8969db9b62bffdfa [file] [log] [blame]
//
// 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_