[libc++][NFC] Rename basic_istream_view::__iterator to __basic_istream_view_iterator
authorNikolas Klauser <nikolasklauser@berlin.de>
Wed, 28 Dec 2022 01:44:04 +0000 (02:44 +0100)
committerNikolas Klauser <nikolasklauser@berlin.de>
Thu, 12 Jan 2023 17:29:52 +0000 (18:29 +0100)
This makes it a lot easier to specialize traits types for it, like __segmented_iterator_traits.

Reviewed By: Mordante, #libc

Spies: libcxx-commits

Differential Revision: https://reviews.llvm.org/D140714

libcxx/include/__ranges/istream_view.h

index 4113b32..69a9df3 100644 (file)
@@ -36,9 +36,19 @@ namespace ranges {
 template <class _Val, class _CharT, class _Traits>
 concept __stream_extractable = requires(basic_istream<_CharT, _Traits>& __is, _Val& __t) { __is >> __t; };
 
+template <movable _Val, class _CharT, class _Traits>
+  requires default_initializable<_Val> && __stream_extractable<_Val, _CharT, _Traits>
+class __basic_istream_view_iterator;
+
 template <movable _Val, class _CharT, class _Traits = char_traits<_CharT>>
   requires default_initializable<_Val> && __stream_extractable<_Val, _CharT, _Traits>
 class basic_istream_view : public view_interface<basic_istream_view<_Val, _CharT, _Traits>> {
+  using __iterator = __basic_istream_view_iterator<_Val, _CharT, _Traits>;
+
+  template <movable _ValueType, class _CharType, class _TraitsType>
+    requires default_initializable<_ValueType> && __stream_extractable<_ValueType, _CharType, _TraitsType>
+  friend class __basic_istream_view_iterator;
+
 public:
   _LIBCPP_HIDE_FROM_ABI constexpr explicit basic_istream_view(basic_istream<_CharT, _Traits>& __stream)
       : __stream_(std::addressof(__stream)) {}
@@ -51,30 +61,29 @@ public:
   _LIBCPP_HIDE_FROM_ABI constexpr default_sentinel_t end() const noexcept { return default_sentinel; }
 
 private:
-  class __iterator;
-
   basic_istream<_CharT, _Traits>* __stream_;
   _LIBCPP_NO_UNIQUE_ADDRESS _Val __value_ = _Val();
 };
 
 template <movable _Val, class _CharT, class _Traits>
   requires default_initializable<_Val> && __stream_extractable<_Val, _CharT, _Traits>
-class basic_istream_view<_Val, _CharT, _Traits>::__iterator {
+class __basic_istream_view_iterator {
 public:
   using iterator_concept = input_iterator_tag;
   using difference_type  = ptrdiff_t;
   using value_type       = _Val;
 
-  _LIBCPP_HIDE_FROM_ABI constexpr explicit __iterator(basic_istream_view& __parent) noexcept
+  _LIBCPP_HIDE_FROM_ABI constexpr explicit __basic_istream_view_iterator(
+      basic_istream_view<_Val, _CharT, _Traits>& __parent) noexcept
       : __parent_(std::addressof(__parent)) {}
 
-  __iterator(const __iterator&)                  = delete;
-  _LIBCPP_HIDE_FROM_ABI __iterator(__iterator&&) = default;
+  __basic_istream_view_iterator(const __basic_istream_view_iterator&)                  = delete;
+  _LIBCPP_HIDE_FROM_ABI __basic_istream_view_iterator(__basic_istream_view_iterator&&) = default;
 
-  __iterator& operator=(const __iterator&)                  = delete;
-  _LIBCPP_HIDE_FROM_ABI __iterator& operator=(__iterator&&) = default;
+  __basic_istream_view_iterator& operator=(const __basic_istream_view_iterator&)                  = delete;
+  _LIBCPP_HIDE_FROM_ABI __basic_istream_view_iterator& operator=(__basic_istream_view_iterator&&) = default;
 
-  _LIBCPP_HIDE_FROM_ABI __iterator& operator++() {
+  _LIBCPP_HIDE_FROM_ABI __basic_istream_view_iterator& operator++() {
     *__parent_->__stream_ >> __parent_->__value_;
     return *this;
   }
@@ -83,12 +92,12 @@ public:
 
   _LIBCPP_HIDE_FROM_ABI _Val& operator*() const { return __parent_->__value_; }
 
-  _LIBCPP_HIDE_FROM_ABI friend bool operator==(const __iterator& __x, default_sentinel_t) {
+  _LIBCPP_HIDE_FROM_ABI friend bool operator==(const __basic_istream_view_iterator& __x, default_sentinel_t) {
     return !*__x.__get_parent_stream();
   }
 
 private:
-  basic_istream_view* __parent_;
+  basic_istream_view<_Val, _CharT, _Traits>* __parent_;
 
   _LIBCPP_HIDE_FROM_ABI constexpr basic_istream<_CharT, _Traits>* __get_parent_stream() const {
     return __parent_->__stream_;
@@ -98,10 +107,10 @@ private:
 template <class _Val>
 using istream_view = basic_istream_view<_Val, char>;
 
-#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
+#  ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
 template <class _Val>
 using wistream_view = basic_istream_view<_Val, wchar_t>;
-#endif
+#  endif
 
 namespace views {
 namespace __istream {
@@ -127,7 +136,7 @@ struct __fn {
 
 inline namespace __cpo {
 template <class _Tp>
-  inline constexpr auto istream = __istream::__fn<_Tp>{};
+inline constexpr auto istream = __istream::__fn<_Tp>{};
 } // namespace __cpo
 } // namespace views