Mercurial > hg > CbC > CbC_llvm
comparison libcxx/include/experimental/iterator @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children | 5f17cb93ff66 |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 // -*- C++ -*- | |
2 //===----------------------------- iterator -------------------------------===// | |
3 // | |
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
5 // See https://llvm.org/LICENSE.txt for license information. | |
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
7 // | |
8 //===----------------------------------------------------------------------===// | |
9 | |
10 #ifndef _LIBCPP_EXPERIMENTAL_ITERATOR | |
11 #define _LIBCPP_EXPERIMENTAL_ITERATOR | |
12 | |
13 /* | |
14 namespace std { | |
15 namespace experimental { | |
16 inline namespace fundamentals_v2 { | |
17 | |
18 template <class DelimT, class charT = char, class traits = char_traits<charT>> | |
19 class ostream_joiner { | |
20 public: | |
21 typedef charT char_type; | |
22 typedef traits traits_type; | |
23 typedef basic_ostream<charT, traits> ostream_type; | |
24 typedef output_iterator_tag iterator_category; | |
25 typedef void value_type; | |
26 typedef void difference_type; | |
27 typedef void pointer; | |
28 typedef void reference; | |
29 | |
30 ostream_joiner(ostream_type& s, const DelimT& delimiter); | |
31 ostream_joiner(ostream_type& s, DelimT&& delimiter); | |
32 | |
33 template<typename T> | |
34 ostream_joiner& operator=(const T& value); | |
35 | |
36 ostream_joiner& operator*() noexcept; | |
37 ostream_joiner& operator++() noexcept; | |
38 ostream_joiner& operator++(int) noexcept; | |
39 private: | |
40 ostream_type* out_stream; // exposition only | |
41 DelimT delim; // exposition only | |
42 bool first_element; // exposition only | |
43 }; | |
44 | |
45 template <class charT, class traits, class DelimT> | |
46 ostream_joiner<decay_t<DelimT>, charT, traits> | |
47 make_ostream_joiner(basic_ostream<charT, traits>& os, DelimT&& delimiter); | |
48 | |
49 } // inline namespace fundamentals_v2 | |
50 } // namespace experimental | |
51 } // namespace std | |
52 | |
53 */ | |
54 | |
55 #include <experimental/__config> | |
56 | |
57 #if _LIBCPP_STD_VER > 11 | |
58 | |
59 #include <iterator> | |
60 | |
61 _LIBCPP_BEGIN_NAMESPACE_LFTS | |
62 | |
63 template <class _Delim, class _CharT = char, class _Traits = char_traits<_CharT>> | |
64 class ostream_joiner { | |
65 public: | |
66 | |
67 typedef _CharT char_type; | |
68 typedef _Traits traits_type; | |
69 typedef basic_ostream<char_type,traits_type> ostream_type; | |
70 typedef output_iterator_tag iterator_category; | |
71 typedef void value_type; | |
72 typedef void difference_type; | |
73 typedef void pointer; | |
74 typedef void reference; | |
75 | |
76 ostream_joiner(ostream_type& __os, _Delim&& __d) | |
77 : __output_iter(_VSTD::addressof(__os)), __delim(_VSTD::move(__d)), __first(true) {} | |
78 | |
79 ostream_joiner(ostream_type& __os, const _Delim& __d) | |
80 : __output_iter(_VSTD::addressof(__os)), __delim(__d), __first(true) {} | |
81 | |
82 | |
83 template<typename _Tp> | |
84 ostream_joiner& operator=(const _Tp& __v) | |
85 { | |
86 if (!__first) | |
87 *__output_iter << __delim; | |
88 __first = false; | |
89 *__output_iter << __v; | |
90 return *this; | |
91 } | |
92 | |
93 ostream_joiner& operator*() _NOEXCEPT { return *this; } | |
94 ostream_joiner& operator++() _NOEXCEPT { return *this; } | |
95 ostream_joiner& operator++(int) _NOEXCEPT { return *this; } | |
96 | |
97 private: | |
98 ostream_type* __output_iter; | |
99 _Delim __delim; | |
100 bool __first; | |
101 }; | |
102 | |
103 | |
104 template <class _CharT, class _Traits, class _Delim> | |
105 ostream_joiner<typename decay<_Delim>::type, _CharT, _Traits> | |
106 make_ostream_joiner(basic_ostream<_CharT, _Traits>& __os, _Delim && __d) | |
107 { return ostream_joiner<typename decay<_Delim>::type, _CharT, _Traits>(__os, _VSTD::forward<_Delim>(__d)); } | |
108 | |
109 _LIBCPP_END_NAMESPACE_LFTS | |
110 | |
111 #endif /* _LIBCPP_STD_VER > 11 */ | |
112 | |
113 #endif // _LIBCPP_EXPERIMENTAL_ITERATOR |