diff options
Diffstat (limited to 'boost/numeric/ublas/tensor/storage_traits.hpp')
-rw-r--r-- | boost/numeric/ublas/tensor/storage_traits.hpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/boost/numeric/ublas/tensor/storage_traits.hpp b/boost/numeric/ublas/tensor/storage_traits.hpp new file mode 100644 index 0000000000..52840e9684 --- /dev/null +++ b/boost/numeric/ublas/tensor/storage_traits.hpp @@ -0,0 +1,84 @@ +// +// 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_ |