Skip to content

Commit

Permalink
Fix (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
lackhole authored Jun 16, 2024
1 parent 2f52e4c commit a5e305d
Show file tree
Hide file tree
Showing 22 changed files with 174 additions and 156 deletions.
19 changes: 9 additions & 10 deletions include/preview/__iterator/basic_const_iterator.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include "preview/__concepts/same_as.h"
#include "preview/__concepts/semiregular.h"
#include "preview/__concepts/totally_ordered.h"
#include "preview/__iterator/detail/have_cxx20_iterator.h"
#include "preview/__iterator/bidirectional_iterator.h"
#include "preview/__iterator/contiguous_iterator.h"
#include "preview/__iterator/forward_iterator.h"
Expand All @@ -30,6 +31,7 @@
#include "preview/__memory/addressof.h"
#include "preview/__memory/to_address.h"
#include "preview/__type_traits/common_reference.h"
#include "preview/__type_traits/conditional.h"
#include "preview/__type_traits/conjunction.h"
#include "preview/__type_traits/is_specialization.h"
#include "preview/__type_traits/is_nothrow_convertible.h"
Expand All @@ -48,24 +50,21 @@ struct basic_const_iterator_category {

template<typename Iter>
struct basic_const_iterator_category<Iter, false> {
#if __cplusplus < 202002L
#if !PREVIEW_STD_HAVE_CXX20_ITERATOR
using iterator_category = iterator_ignore;
#endif
};

template<typename Iter>
struct basic_const_iterator_concept {
using iterator_concept =
std::conditional_t<
contiguous_iterator<Iter>::value, contiguous_iterator_tag,
std::conditional_t<
random_access_iterator<Iter>::value, random_access_iterator_tag,
std::conditional_t<
bidirectional_iterator<Iter>::value, bidirectional_iterator_tag,
std::conditional_t<
forward_iterator<Iter>::value, forward_iterator_tag,
conditional_t<
contiguous_iterator<Iter>, contiguous_iterator_tag,
random_access_iterator<Iter>, random_access_iterator_tag,
bidirectional_iterator<Iter>, bidirectional_iterator_tag,
forward_iterator<Iter>, forward_iterator_tag,
input_iterator_tag
>>>>;
>;
};

template<typename I, bool = input_iterator<I>::value /* false */>
Expand Down
3 changes: 2 additions & 1 deletion include/preview/__iterator/common_iterator.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "preview/__concepts/equality_comparable.h"
#include "preview/__concepts/move_constructible.h"
#include "preview/__concepts/same_as.h"
#include "preview/__iterator/detail/have_cxx20_iterator.h"
#include "preview/__iterator/forward_iterator.h"
#include "preview/__iterator/incrementable_traits.h"
#include "preview/__iterator/indirectly_readable.h"
Expand Down Expand Up @@ -350,7 +351,7 @@ namespace detail {

template<typename I, bool = std::is_integral<iter_difference_t<I>>::value /* false */>
struct common_iterator_category {
#if __cplusplus < 202002L
#if !PREVIEW_STD_HAVE_CXX20_ITERATOR
using iterator_category = iterator_ignore;
#endif
};
Expand Down
2 changes: 1 addition & 1 deletion include/preview/__iterator/counted_iterator.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#include "preview/__concepts/common_with.h"
#include "preview/__concepts/convertible_to.h"
#include "preview/__concepts/dereferenceable.h"
#include "preview/__iterator/detail/std_check.h"
#include "preview/__iterator/detail/have_cxx20_iterator.h"
#include "preview/__iterator/contiguous_iterator.h"
#include "preview/__iterator/iterator_traits.h"
#include "preview/__iterator/bidirectional_iterator.h"
Expand Down
34 changes: 34 additions & 0 deletions include/preview/__iterator/detail/have_cxx20_iterator.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# /**
# * Created by YongGyu Lee on 2024. 6. 16..
# */
#
# ifndef PREVIEW_ITERATOR_DETAIL_STD_CHECK_H_
# define PREVIEW_ITERATOR_DETAIL_STD_CHECK_H_
#
# include <iterator>
#
# include "preview/core.h"
#
# /* TODO: Not use this when defining views::iterator */
# if PREVIEW_CXX_VERSION >= 20 && (PREVIEW_ANDROID == 0 || (defined(PREVIEW_NDK_VERSION_MAJOR) && PREVIEW_NDK_VERSION_MAJOR >= 26))
# define PREVIEW_STD_HAVE_CXX20_ITERATOR 1
# else
# define PREVIEW_STD_HAVE_CXX20_ITERATOR 0
# endif

// TODO: Test using template
//namespace preview {
//namespace detail {
//
//template<typename T>
//struct cxx20_iterator_tester {
// using difference_type = int;
// using value_type = int;
// using reference = int&;
// using iterator_category = std::input_iterator_tag;
//};
//
//} // namespace preview
//} // namespace preview

# endif // PREVIEW_ITERATOR_DETAIL_STD_CHECK_H_
16 changes: 0 additions & 16 deletions include/preview/__iterator/detail/std_check.h

This file was deleted.

4 changes: 2 additions & 2 deletions include/preview/__iterator/indirectly_readable_traits.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ struct value_typer {

template<
typename T,
bool = has_typename_value_type<T>::value,
bool = has_typename_element_type<T>::value
bool = has_typename_value_type<T>::value, /* false */
bool = has_typename_element_type<T>::value /* false */
>
struct indirectly_readable_traits_impl {};

Expand Down
2 changes: 1 addition & 1 deletion include/preview/__iterator/std_common_iterator.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#ifndef PREVIEW_ITERATOR_STD_COMMON_ITERATOR_H_
#define PREVIEW_ITERATOR_STD_COMMON_ITERATOR_H_

#include "preview/__iterator/detail/std_check.h"
#include "preview/__iterator/detail/have_cxx20_iterator.h"

#if PREVIEW_STD_HAVE_CXX20_ITERATOR

Expand Down
2 changes: 1 addition & 1 deletion include/preview/__iterator/std_counted_iterator.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#ifndef PREVIEW_ITERATOR_STD_COUNTED_ITERATOR_H_
#define PREVIEW_ITERATOR_STD_COUNTED_ITERATOR_H_

#include "preview/__iterator/detail/std_check.h"
#include "preview/__iterator/detail/have_cxx20_iterator.h"

#if PREVIEW_STD_HAVE_CXX20_ITERATOR

Expand Down
3 changes: 2 additions & 1 deletion include/preview/__ranges/views/basic_istream_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#include "preview/__concepts/default_initializable.h"
#include "preview/__concepts/movable.h"
#include "preview/__iterator/detail/have_cxx20_iterator.h"
#include "preview/__iterator/default_sentinel_t.h"
#include "preview/__iterator/iterator_tag.h"
#include "preview/__memory/addressof.h"
Expand Down Expand Up @@ -43,7 +44,7 @@ class basic_istream_view : public view_interface<basic_istream_view<Val, CharT,
using iterator_concept = input_iterator_tag;
using difference_type = std::ptrdiff_t;
using value_type = Val;
#if __cplusplus < 202002L
#if !PREVIEW_STD_HAVE_CXX20_ITERATOR
using iterator_category = iterator_ignore;
using pointer = void;
using reference = Val&;
Expand Down
16 changes: 8 additions & 8 deletions include/preview/__ranges/views/cartesian_product_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#include "preview/__concepts/equality_comparable.h"
#include "preview/__iterator/default_sentinel_t.h"
#include "preview/__iterator/detail/have_cxx20_iterator.h"
#include "preview/__iterator/indirectly_swappable.h"
#include "preview/__iterator/iterator_tag.h"
#include "preview/__iterator/iter_move.h"
Expand All @@ -34,6 +35,7 @@
#include "preview/__ranges/view_interface.h"
#include "preview/__tuple/tuple_transform.h"
#include "preview/__type_traits/bool_constant.h"
#include "preview/__type_traits/conditional.h"
#include "preview/__type_traits/conjunction.h"
#include "preview/__type_traits/disjunction.h"
#include "preview/__type_traits/maybe_const.h"
Expand Down Expand Up @@ -188,22 +190,20 @@ class cartesian_product_view : public view_interface<cartesian_product_view<Firs
public:
using iterator_category = input_iterator_tag;
using iterator_concept =
std::conditional_t<
detail::cartesian_product_is_random_access<Const, First, Vs...>::value, random_access_iterator_tag,
std::conditional_t<
detail::cartesian_product_is_bidirectional<Const, First, Vs...>::value, bidirectional_iterator_tag,
std::conditional_t<
forward_range<maybe_const<Const, First>>::value, forward_iterator_tag,
conditional_t<
detail::cartesian_product_is_random_access<Const, First, Vs...>, random_access_iterator_tag,
detail::cartesian_product_is_bidirectional<Const, First, Vs...>, bidirectional_iterator_tag,
forward_range<maybe_const<Const, First>>, forward_iterator_tag,
input_iterator_tag
>>>;
>;
using value_type = std::tuple<
range_value_t<maybe_const<Const, First>>,
range_value_t<maybe_const<Const, Vs >>... >;
using reference = std::tuple<
range_reference_t<maybe_const<Const, First>>,
range_reference_t<maybe_const<Const, Vs >>... >;
using difference_type = int;
#if __cplusplus < 202002L
#if !PREVIEW_STD_HAVE_CXX20_ITERATOR
using pointer = void;
#endif

Expand Down
13 changes: 6 additions & 7 deletions include/preview/__ranges/views/concat_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "preview/__ranges/views/all.h"
#include "preview/__tuple/tuple_fold.h"
#include "preview/__tuple/tuple_transform.h"
#include "preview/__type_traits/conditional.h"
#include "preview/__type_traits/conjunction.h"
#include "preview/__type_traits/common_type.h"
#include "preview/__type_traits/common_reference.h"
Expand Down Expand Up @@ -89,14 +90,12 @@ struct concat_view : view_interface<concat_view<Rngs...>> {
struct iterator {
using iterator_category = input_iterator_tag;
using iterator_concept =
std::conditional_t<
conjunction<random_access_range<Rngs>...>::value, random_access_iterator_tag,
std::conditional_t<
conjunction<bidirectional_range<Rngs>...>::value, bidirectional_iterator_tag,
std::conditional_t<
conjunction<forward_range<Rngs>...>::value, forward_iterator_tag,
conditional_t<
conjunction<random_access_range<Rngs>...>, random_access_iterator_tag,
conjunction<bidirectional_range<Rngs>...>, bidirectional_iterator_tag,
conjunction<forward_range<Rngs>...>, forward_iterator_tag,
input_iterator_tag
>>>;
>;
using value_type = common_type_t<range_value_t<maybe_const<IsConst, Rngs>>...>;
using difference_type = common_type_t<range_difference_t<Rngs>...>;
using reference = common_reference_t<range_reference_t<maybe_const<IsConst, Rngs>>...>;
Expand Down
27 changes: 13 additions & 14 deletions include/preview/__ranges/views/elements_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "preview/__concepts/convertible_to.h"
#include "preview/__concepts/derived_from.h"
#include "preview/__concepts/move_constructible.h"
#include "preview/__iterator/detail/have_cxx20_iterator.h"
#include "preview/__iterator/iterator_tag.h"
#include "preview/__iterator/iterator_traits.h"
#include "preview/__ranges/begin.h"
Expand All @@ -33,6 +34,7 @@
#include "preview/__ranges/viewable_range.h"
#include "preview/__tuple/tuple_like.h"
#include "preview/__type_traits/bool_constant.h"
#include "preview/__type_traits/conditional.h"
#include "preview/__type_traits/conjunction.h"
#include "preview/__type_traits/disjunction.h"
#include "preview/__type_traits/has_typename_type.h"
Expand Down Expand Up @@ -64,7 +66,7 @@ struct returnable_element<T, N, false, true>
// Not defined, if Base does not model forward_range
template<typename Base, std::size_t N, bool = forward_range<Base>::value /* false */>
struct elements_view_iterator_category {
#if __cplusplus < 202002L
#if !PREVIEW_STD_HAVE_CXX20_ITERATOR
using iterator_category = iterator_ignore;
#endif
};
Expand All @@ -76,12 +78,11 @@ struct elements_view_iterator_category<Base, N, true> {

public:
using iterator_category =
std::conditional_t<
std::is_rvalue_reference<decltype(std::get<N>(*std::declval<iterator_t<Base>&>()))>::value, input_iterator_tag,
std::conditional_t<
derived_from<C, random_access_iterator_tag>::value, random_access_iterator_tag,
conditional_t<
std::is_rvalue_reference<decltype(std::get<N>(*std::declval<iterator_t<Base>&>()))>, input_iterator_tag,
derived_from<C, random_access_iterator_tag>, random_access_iterator_tag,
C
>>;
>;
};

} // namespace detail
Expand Down Expand Up @@ -114,17 +115,15 @@ class elements_view : public view_interface<elements_view<V, N>> {

public:
using iterator_concept =
std::conditional_t<
random_access_range<Base>::value, random_access_iterator_tag,
std::conditional_t<
bidirectional_range<Base>::value, bidirectional_iterator_tag,
std::conditional_t<
forward_range<Base>::value, forward_iterator_tag,
conditional_t<
random_access_range<Base>, random_access_iterator_tag,
bidirectional_range<Base>, bidirectional_iterator_tag,
forward_range<Base>, forward_iterator_tag,
input_iterator_tag
>>>;
>;
using value_type = remove_cvref_t<std::tuple_element_t<N, range_value_t<Base>>>;
using difference_type = range_difference_t<Base>;
#if __cplusplus < 202002L
#if !PREVIEW_STD_HAVE_CXX20_ITERATOR
using pointer = void;
using reference = typename iterator_reference<range_reference_t<Base>>::type;
#endif
Expand Down
13 changes: 6 additions & 7 deletions include/preview/__ranges/views/enumerate_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "preview/__ranges/views/all.h"
#endif
#include "preview/__type_traits/bool_constant.h"
#include "preview/__type_traits/conditional.h"
#include "preview/__type_traits/conjunction.h"
#include "preview/__type_traits/maybe_const.h"
#include "preview/__utility/cxx20_rel_ops.h"
Expand Down Expand Up @@ -77,14 +78,12 @@ class enumerate_view : public view_interface<enumerate_view<V>> {
public:
using iterator_category = input_iterator_tag;
using iterator_concept =
std::conditional_t<
random_access_range<Base>::value, random_access_iterator_tag,
std::conditional_t<
bidirectional_range<Base>::value, bidirectional_iterator_tag,
std::conditional_t<
forward_range<Base>::value, forward_iterator_tag,
conditional_t<
random_access_range<Base>, random_access_iterator_tag,
bidirectional_range<Base>, bidirectional_iterator_tag,
forward_range<Base>, forward_iterator_tag,
input_iterator_tag
>>>;
>;
using difference_type = range_difference_t<Base>;
using value_type = Tuple<difference_type, range_value_t<Base>>;
using pointer = void;
Expand Down
Loading

0 comments on commit a5e305d

Please sign in to comment.