From c2aa932646c80549b79baf44a6a0b10b454fe08f Mon Sep 17 00:00:00 2001 From: bolero-MURAKAMI Date: Mon, 11 May 2015 08:35:40 +0900 Subject: [PATCH] fix sub_array for ICC 15 --- sprout/sub_array/sub_array.hpp | 115 ++++++++++++++++----------------- 1 file changed, 56 insertions(+), 59 deletions(-) diff --git a/sprout/sub_array/sub_array.hpp b/sprout/sub_array/sub_array.hpp index f6a0c101..9862b174 100644 --- a/sprout/sub_array/sub_array.hpp +++ b/sprout/sub_array/sub_array.hpp @@ -27,16 +27,16 @@ namespace sprout { template class sub_array_impl { - protected: + public: typedef Container container_type; typedef typename std::remove_reference::type internal_type; - protected: + public: SPROUT_STATIC_CONSTEXPR bool is_reference = std::is_reference::value; SPROUT_STATIC_CONSTEXPR bool is_const = std::is_const::value; - protected: + public: typedef typename sprout::container_traits::const_iterator impl_const_iterator; typedef typename sprout::container_traits::difference_type impl_difference_type; - protected: + public: typedef typename std::conditional< is_reference, internal_type*, @@ -48,13 +48,13 @@ namespace sprout { internal_type const& >::type param_type; typedef internal_type const& const_param_type; - protected: + public: typedef typename std::conditional< std::is_array::value, sprout::detail::is_non_reference_array_tag, sprout::detail::is_not_non_reference_array_tag >::type array_tag; - protected: + public: template static SPROUT_CONSTEXPR typename std::enable_if< std::is_reference::value, @@ -139,7 +139,7 @@ namespace sprout { >::type to_const_held(holder_type const& arr) { return arr; } - protected: + public: holder_type array_; impl_difference_type to_first_; impl_difference_type to_last_; @@ -150,7 +150,7 @@ namespace sprout { , to_last_() {} sub_array_impl(sub_array_impl const&) = default; - protected: + public: template SPROUT_CONSTEXPR sub_array_impl( ContainerTag, @@ -211,8 +211,7 @@ namespace sprout { // template class sub_array - : private sprout::detail::sub_array_impl - , public sprout::container_traits_facade::type> + : public sprout::container_traits_facade::type> { private: typedef sprout::detail::sub_array_impl impl_type; @@ -241,15 +240,13 @@ namespace sprout { private: typedef typename impl_type::array_tag array_tag; private: - using impl_type::array_; - using impl_type::to_first_; - using impl_type::to_last_; + impl_type impl_; public: // construct/copy/destroy: SPROUT_CONSTEXPR sub_array() SPROUT_DEFAULTED_DEFAULT_CONSTRUCTOR_DECL sub_array(sub_array const&) = default; SPROUT_CONSTEXPR sub_array(param_type arr, const_iterator first, const_iterator last) - : impl_type( + : impl_( array_tag(), arr, sprout::make_index_tuple::make(), @@ -258,7 +255,7 @@ namespace sprout { ) {} SPROUT_CONSTEXPR sub_array(param_type arr, difference_type to_first, difference_type to_last) - : impl_type( + : impl_( array_tag(), arr, sprout::make_index_tuple::make(), @@ -267,35 +264,35 @@ namespace sprout { ) {} SPROUT_CONSTEXPR sub_array(sub_array const& other, const_iterator first, const_iterator last) - : impl_type( + : impl_( array_tag(), - impl_type::template to_param(other.array_), + impl_type::template to_param(other.impl_.array_), sprout::make_index_tuple::make(), sprout::distance(sprout::begin(other.get_internal()), first), sprout::distance(sprout::begin(other.get_internal()), last) ) {} SPROUT_CONSTEXPR sub_array(sub_array const& other, difference_type to_first, difference_type to_last) - : impl_type( + : impl_( array_tag(), - impl_type::template to_param(other.array_), + impl_type::template to_param(other.impl_.array_), sprout::make_index_tuple::make(), - other.to_first_ + to_first, - other.to_first_ + to_last + other.impl_.to_first_ + to_first, + other.impl_.to_first_ + to_last ) {} template SPROUT_CXX14_CONSTEXPR sub_array& operator=(sub_array const& rhs) { - array_ = rhs.array_; - to_first_ = rhs.to_first_; - to_last_ = rhs.to_last_; + impl_.array_ = rhs.impl_.array_; + impl_.to_first_ = rhs.impl_.to_first_; + impl_.to_last_ = rhs.impl_.to_last_; return *this; } template SPROUT_CXX14_CONSTEXPR sub_array& operator=(sub_array&& rhs) { - array_ = sprout::move(rhs.array_); - to_first_ = sprout::move(rhs.to_first_); - to_last_ = sprout::move(rhs.to_last_); + impl_.array_ = sprout::move(rhs.impl_.array_); + impl_.to_first_ = sprout::move(rhs.impl_.to_first_); + impl_.to_last_ = sprout::move(rhs.impl_.to_last_); return *this; } @@ -304,76 +301,76 @@ namespace sprout { } template SPROUT_CXX14_CONSTEXPR void swap(sub_array& other) - SPROUT_NOEXCEPT_IF_EXPR(sprout::swap(other.array_, array_)) + SPROUT_NOEXCEPT_IF_EXPR(sprout::swap(other.impl_.array_, impl_.array_)) { - sprout::swap(other.array_, array_); - sprout::swap(other.to_first_, to_first_); - sprout::swap(other.to_last_, to_last_); + sprout::swap(other.impl_.array_, impl_.array_); + sprout::swap(other.impl_.to_first_, impl_.to_first_); + sprout::swap(other.impl_.to_last_, impl_.to_last_); } // iterators: SPROUT_CXX14_CONSTEXPR iterator begin() { - return sprout::next(sprout::begin(get_internal()), to_first_); + return sprout::next(sprout::begin(get_internal()), impl_.to_first_); } SPROUT_CONSTEXPR const_iterator begin() const { - return sprout::next(sprout::begin(get_internal()), to_first_); + return sprout::next(sprout::begin(get_internal()), impl_.to_first_); } SPROUT_CXX14_CONSTEXPR iterator end() { - return sprout::next(sprout::begin(get_internal()), to_last_); + return sprout::next(sprout::begin(get_internal()), impl_.to_last_); } SPROUT_CONSTEXPR const_iterator end() const { - return sprout::next(sprout::begin(get_internal()), to_last_); + return sprout::next(sprout::begin(get_internal()), impl_.to_last_); } SPROUT_CONSTEXPR const_iterator cbegin() const { - return sprout::next(sprout::begin(get_internal()), to_first_); + return sprout::next(sprout::begin(get_internal()), impl_.to_first_); } SPROUT_CONSTEXPR const_iterator cend() const { - return sprout::next(sprout::begin(get_internal()), to_last_); + return sprout::next(sprout::begin(get_internal()), impl_.to_last_); } // capacity: SPROUT_CONSTEXPR size_type size() const { - return to_last_ - to_first_; + return impl_.to_last_ - impl_.to_first_; } SPROUT_CONSTEXPR size_type max_size() const { return size(); } SPROUT_CONSTEXPR bool empty() const { - return to_first_ == to_last_; + return impl_.to_first_ == impl_.to_last_; } // element access: SPROUT_CXX14_CONSTEXPR reference operator[](size_type i) { - return *sprout::next(sprout::begin(get_internal()), to_first_ + i); + return *sprout::next(sprout::begin(get_internal()), impl_.to_first_ + i); } SPROUT_CONSTEXPR const_reference operator[](size_type i) const { - return *sprout::next(sprout::begin(get_internal()), to_first_ + i); + return *sprout::next(sprout::begin(get_internal()), impl_.to_first_ + i); } SPROUT_CXX14_CONSTEXPR reference at(size_type i) { - return i < size() ? *sprout::next(sprout::begin(get_internal()), to_first_ + i) - : (throw std::out_of_range("sub_array<>: index out of range"), *sprout::next(sprout::begin(get_internal()), to_first_ + i)) + return i < size() ? *sprout::next(sprout::begin(get_internal()), impl_.to_first_ + i) + : (throw std::out_of_range("sub_array<>: index out of range"), *sprout::next(sprout::begin(get_internal()), impl_.to_first_ + i)) ; } SPROUT_CONSTEXPR const_reference at(size_type i) const { - return i < size() ? *sprout::next(sprout::begin(get_internal()), to_first_ + i) - : (throw std::out_of_range("sub_array<>: index out of range"), *sprout::next(sprout::begin(get_internal()), to_first_ + i)) + return i < size() ? *sprout::next(sprout::begin(get_internal()), impl_.to_first_ + i) + : (throw std::out_of_range("sub_array<>: index out of range"), *sprout::next(sprout::begin(get_internal()), impl_.to_first_ + i)) ; } SPROUT_CXX14_CONSTEXPR reference front() { - return *sprout::next(sprout::begin(get_internal()), to_first_); + return *sprout::next(sprout::begin(get_internal()), impl_.to_first_); } SPROUT_CONSTEXPR const_reference front() const { - return *sprout::next(sprout::begin(get_internal()), to_first_); + return *sprout::next(sprout::begin(get_internal()), impl_.to_first_); } SPROUT_CXX14_CONSTEXPR reference back() { - return *sprout::next(sprout::begin(get_internal()), to_last_ - 1); + return *sprout::next(sprout::begin(get_internal()), impl_.to_last_ - 1); } SPROUT_CONSTEXPR const_reference back() const { - return *sprout::next(sprout::begin(get_internal()), to_last_ - 1); + return *sprout::next(sprout::begin(get_internal()), impl_.to_last_ - 1); } SPROUT_CXX14_CONSTEXPR pointer data() { - return get_internal().data() + to_first_; + return get_internal().data() + impl_.to_first_; } SPROUT_CONSTEXPR const_pointer data() const { - return get_internal().data() + to_first_; + return get_internal().data() + impl_.to_first_; } // others: SPROUT_CXX14_CONSTEXPR pointer c_array() { @@ -392,28 +389,28 @@ namespace sprout { } SPROUT_CXX14_CONSTEXPR internal_type& get_internal() { - return impl_type::template to_held(array_); + return impl_type::template to_held(impl_.array_); } SPROUT_CONSTEXPR internal_type const& get_internal() const { - return impl_type::template to_const_held(array_); + return impl_type::template to_const_held(impl_.array_); } SPROUT_CXX14_CONSTEXPR internal_type& get_array() { - return impl_type::template to_held(array_); + return impl_type::template to_held(impl_.array_); } SPROUT_CONSTEXPR internal_type const& get_array() const { - return impl_type::template to_const_held(array_); + return impl_type::template to_const_held(impl_.array_); } SPROUT_CONSTEXPR difference_type to_first() const { - return to_first_; + return impl_.to_first_; } SPROUT_CONSTEXPR difference_type to_last() const { - return to_last_; + return impl_.to_last_; } SPROUT_CONSTEXPR difference_type from_begin() const { - return to_first_; + return impl_.to_first_; } SPROUT_CONSTEXPR difference_type from_end() const { - return to_last_ - sprout::size(get_internal()); + return impl_.to_last_ - sprout::size(get_internal()); } SPROUT_CXX14_CONSTEXPR iterator nth(size_type i) {