Skip to content

Commit

Permalink
refs #113 Некоторые метафункции для диапазонов
Browse files Browse the repository at this point in the history
  • Loading branch information
izvolov committed Jun 20, 2020
1 parent 07b064c commit e7b3fe5
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 72 deletions.
20 changes: 10 additions & 10 deletions include/burst/iterator/detail/join_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
#define BURST_ITERATOR_DETAIL_JOIN_ITERATOR_HPP

#include <burst/iterator/end_tag.hpp>
#include <burst/type_traits/range_reference.hpp>
#include <burst/type_traits/range_value.hpp>

#include <boost/iterator/iterator_categories.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <boost/next_prior.hpp>
#include <boost/range/difference_type.hpp>
#include <boost/range/distance.hpp>
#include <boost/range/reference.hpp>
#include <boost/range/value_type.hpp>

#include <algorithm>
#include <cassert>
Expand All @@ -33,9 +33,9 @@ namespace burst
public boost::iterator_facade
<
join_iterator_impl<InputIterator, IteratorCategory>,
typename boost::range_value<typename std::iterator_traits<InputIterator>::value_type>::type,
range_value_t<typename std::iterator_traits<InputIterator>::value_type>,
boost::single_pass_traversal_tag,
typename boost::range_reference<typename std::iterator_traits<InputIterator>::value_type>::type
range_reference_t<typename std::iterator_traits<InputIterator>::value_type>
>
{
private:
Expand All @@ -55,9 +55,9 @@ namespace burst
boost::iterator_facade
<
join_iterator_impl,
typename boost::range_value<inner_range_type>::type,
range_value_t<inner_range_type>,
boost::single_pass_traversal_tag,
typename boost::range_reference<inner_range_type>::type
range_reference_t<inner_range_type>
>;

public:
Expand Down Expand Up @@ -176,9 +176,9 @@ namespace burst
public boost::iterator_facade
<
join_iterator_impl<RandomAccessIterator, boost::random_access_traversal_tag>,
typename boost::range_value<typename std::iterator_traits<RandomAccessIterator>::value_type>::type,
range_value_t<typename std::iterator_traits<RandomAccessIterator>::value_type>,
boost::random_access_traversal_tag,
typename boost::range_reference<typename std::iterator_traits<RandomAccessIterator>::value_type>::type
range_reference_t<typename std::iterator_traits<RandomAccessIterator>::value_type>
>
{
private:
Expand All @@ -190,9 +190,9 @@ namespace burst
boost::iterator_facade
<
join_iterator_impl,
typename boost::range_value<inner_range_type>::type,
range_value_t<inner_range_type>,
boost::random_access_traversal_tag,
typename boost::range_reference<inner_range_type>::type
range_reference_t<inner_range_type>
>;

public:
Expand Down
20 changes: 6 additions & 14 deletions include/burst/iterator/intersect_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
#include <burst/iterator/detail/prevent_writing.hpp>
#include <burst/iterator/end_tag.hpp>
#include <burst/range/skip_to_lower_bound.hpp>
#include <burst/type_traits/range_reference.hpp>
#include <burst/type_traits/range_value.hpp>

#include <boost/algorithm/cxx11/is_sorted.hpp>
#include <boost/assert.hpp>
#include <boost/iterator/iterator_concepts.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <boost/range/concepts.hpp>
#include <boost/range/reference.hpp>
#include <boost/range/value_type.hpp>

#include <algorithm>
#include <functional>
Expand Down Expand Up @@ -69,19 +69,11 @@ namespace burst
public boost::iterator_facade
<
intersect_iterator<RandomAccessIterator, Compare>,
typename boost::range_value
<
typename std::iterator_traits<RandomAccessIterator>::value_type
>
::type,
range_value_t<typename std::iterator_traits<RandomAccessIterator>::value_type>,
boost::single_pass_traversal_tag,
detail::prevent_writing_t
<
typename boost::range_reference
<
typename std::iterator_traits<RandomAccessIterator>::value_type
>
::type
range_reference_t<typename std::iterator_traits<RandomAccessIterator>::value_type>
>
>
{
Expand All @@ -98,9 +90,9 @@ namespace burst
boost::iterator_facade
<
intersect_iterator,
typename boost::range_value<inner_range_type>::type,
range_value_t<inner_range_type>,
boost::single_pass_traversal_tag,
detail::prevent_writing_t<typename boost::range_reference<inner_range_type>::type>
detail::prevent_writing_t<range_reference_t<inner_range_type>>
>;

public:
Expand Down
12 changes: 6 additions & 6 deletions include/burst/iterator/merge_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
#include <burst/functional/each.hpp>
#include <burst/functional/invert.hpp>
#include <burst/iterator/end_tag.hpp>
#include <burst/type_traits/range_reference.hpp>
#include <burst/type_traits/range_value.hpp>

#include <boost/algorithm/cxx11/is_sorted.hpp>
#include <boost/assert.hpp>
#include <boost/iterator/iterator_concepts.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <boost/range/reference.hpp>
#include <boost/range/value_type.hpp>

#include <algorithm>
#include <functional>
Expand Down Expand Up @@ -56,9 +56,9 @@ namespace burst
public boost::iterator_facade
<
merge_iterator<RandomAccessIterator, Compare>,
typename boost::range_value<typename std::iterator_traits<RandomAccessIterator>::value_type>::type,
range_value_t<typename std::iterator_traits<RandomAccessIterator>::value_type>,
boost::single_pass_traversal_tag,
typename boost::range_reference<typename std::iterator_traits<RandomAccessIterator>::value_type>::type
range_reference_t<typename std::iterator_traits<RandomAccessIterator>::value_type>
>
{
private:
Expand All @@ -69,9 +69,9 @@ namespace burst
boost::iterator_facade
<
merge_iterator,
typename boost::range_value<typename std::iterator_traits<outer_range_iterator>::value_type>::type,
range_value_t<typename std::iterator_traits<outer_range_iterator>::value_type>,
boost::single_pass_traversal_tag,
typename boost::range_reference<typename std::iterator_traits<outer_range_iterator>::value_type>::type
range_reference_t<typename std::iterator_traits<outer_range_iterator>::value_type>
>;

public:
Expand Down
20 changes: 6 additions & 14 deletions include/burst/iterator/semiintersect_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
#include <burst/iterator/detail/prevent_writing.hpp>
#include <burst/iterator/end_tag.hpp>
#include <burst/range/skip_to_lower_bound.hpp>
#include <burst/type_traits/range_reference.hpp>
#include <burst/type_traits/range_value.hpp>

#include <boost/algorithm/cxx11/is_sorted.hpp>
#include <boost/assert.hpp>
Expand All @@ -14,8 +16,6 @@
#include <boost/range/adaptor/transformed.hpp>
#include <boost/range/algorithm/count.hpp>
#include <boost/range/concepts.hpp>
#include <boost/range/reference.hpp>
#include <boost/range/value_type.hpp>

#include <algorithm>
#include <cstddef>
Expand Down Expand Up @@ -81,19 +81,11 @@ namespace burst
public boost::iterator_facade
<
semiintersect_iterator<RandomAccessIterator, Compare>,
typename boost::range_value
<
typename std::iterator_traits<RandomAccessIterator>::value_type
>
::type,
range_value_t<typename std::iterator_traits<RandomAccessIterator>::value_type>,
boost::single_pass_traversal_tag,
detail::prevent_writing_t
<
typename boost::range_reference
<
typename std::iterator_traits<RandomAccessIterator>::value_type
>
::type
range_reference_t<typename std::iterator_traits<RandomAccessIterator>::value_type>
>
>
{
Expand All @@ -110,9 +102,9 @@ namespace burst
boost::iterator_facade
<
semiintersect_iterator,
typename boost::range_value<inner_range_type>::type,
range_value_t<inner_range_type>,
boost::single_pass_traversal_tag,
detail::prevent_writing_t<typename boost::range_reference<inner_range_type>::type>
detail::prevent_writing_t<range_reference_t<inner_range_type>>
>;

public:
Expand Down
20 changes: 6 additions & 14 deletions include/burst/iterator/symmetric_difference_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
#include <burst/functional/each.hpp>
#include <burst/iterator/detail/prevent_writing.hpp>
#include <burst/iterator/end_tag.hpp>
#include <burst/type_traits/range_reference.hpp>
#include <burst/type_traits/range_value.hpp>

#include <boost/algorithm/cxx11/is_sorted.hpp>
#include <boost/assert.hpp>
#include <boost/iterator/iterator_concepts.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <boost/range/concepts.hpp>
#include <boost/range/reference.hpp>
#include <boost/range/value_type.hpp>

#include <algorithm>
#include <functional>
Expand Down Expand Up @@ -69,19 +69,11 @@ namespace burst
public boost::iterator_facade
<
symmetric_difference_iterator<RandomAccessIterator, Compare>,
typename boost::range_value
<
typename std::iterator_traits<RandomAccessIterator>::value_type
>
::type,
range_value_t<typename std::iterator_traits<RandomAccessIterator>::value_type>,
boost::single_pass_traversal_tag,
detail::prevent_writing_t
<
typename boost::range_reference
<
typename std::iterator_traits<RandomAccessIterator>::value_type
>
::type
range_reference_t<typename std::iterator_traits<RandomAccessIterator>::value_type>
>
>
{
Expand All @@ -98,9 +90,9 @@ namespace burst
boost::iterator_facade
<
symmetric_difference_iterator,
typename boost::range_value<inner_range_type>::type,
range_value_t<inner_range_type>,
boost::single_pass_traversal_tag,
detail::prevent_writing_t<typename boost::range_reference<inner_range_type>::type>
detail::prevent_writing_t<range_reference_t<inner_range_type>>
>;

public:
Expand Down
20 changes: 6 additions & 14 deletions include/burst/iterator/union_iterator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
#include <burst/functional/each.hpp>
#include <burst/iterator/detail/prevent_writing.hpp>
#include <burst/iterator/end_tag.hpp>
#include <burst/type_traits/range_reference.hpp>
#include <burst/type_traits/range_value.hpp>

#include <boost/algorithm/cxx11/is_sorted.hpp>
#include <boost/assert.hpp>
#include <boost/iterator/iterator_concepts.hpp>
#include <boost/iterator/iterator_facade.hpp>
#include <boost/range/concepts.hpp>
#include <boost/range/reference.hpp>
#include <boost/range/value_type.hpp>

#include <algorithm>
#include <functional>
Expand Down Expand Up @@ -68,19 +68,11 @@ namespace burst
public boost::iterator_facade
<
union_iterator<RandomAccessIterator, Compare>,
typename boost::range_value
<
typename std::iterator_traits<RandomAccessIterator>::value_type
>
::type,
range_value_t<typename std::iterator_traits<RandomAccessIterator>::value_type>,
boost::single_pass_traversal_tag,
detail::prevent_writing_t
<
typename boost::range_reference
<
typename std::iterator_traits<RandomAccessIterator>::value_type
>
::type
range_reference_t<typename std::iterator_traits<RandomAccessIterator>::value_type>
>
>
{
Expand All @@ -97,9 +89,9 @@ namespace burst
boost::iterator_facade
<
union_iterator,
typename boost::range_value<inner_range_type>::type,
range_value_t<inner_range_type>,
boost::single_pass_traversal_tag,
detail::prevent_writing_t<typename boost::range_reference<inner_range_type>::type>
detail::prevent_writing_t<range_reference_t<inner_range_type>>
>;

public:
Expand Down
12 changes: 12 additions & 0 deletions include/burst/type_traits/range_reference.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef BURST_TYPE_TRAITS_RANGE_REFERENCE_HPP
#define BURST_TYPE_TRAITS_RANGE_REFERENCE_HPP

#include <boost/range/reference.hpp>

namespace burst
{
template <typename Range>
using range_reference_t = typename boost::range_reference<Range>::type;
} // namespace burst

#endif // BURST_TYPE_TRAITS_RANGE_REFERENCE_HPP
12 changes: 12 additions & 0 deletions include/burst/type_traits/range_value.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef BURST_TYPE_TRAITS_RANGE_VALUE_HPP
#define BURST_TYPE_TRAITS_RANGE_VALUE_HPP

#include <boost/range/value_type.hpp>

namespace burst
{
template <typename Range>
using range_value_t = typename boost::range_value<Range>::type;
} // namespace burst

#endif // BURST_TYPE_TRAITS_RANGE_VALUE_HPP

0 comments on commit e7b3fe5

Please sign in to comment.