File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ #ifndef REPEAT_HPP
2+ #define REPEAT_HPP
3+
4+ #include < iostream>
5+ #include < iterator_range.hpp>
6+ #include < iterator>
7+
8+ namespace iter {
9+ template <typename Elem>
10+ struct repeat_iter {
11+ const Elem elem;
12+ size_t until;
13+ size_t start=0 ;
14+ repeat_iter (const Elem & elem,
15+ size_t until) :
16+ elem (elem),
17+ until (until) {}
18+ repeat_iter & operator ++() {
19+ if (until != 0 ) ++start; // no point in repeating 0 times
20+ // so use that to repeat infinitely
21+ return *this ;
22+ }
23+ bool operator !=(const repeat_iter & rhs) {
24+ if (until == 0 ) return true ;
25+ else if (start != until) return true ;
26+ else return false ;
27+ }
28+ Elem operator *()
29+ {
30+ return elem;
31+ }
32+ };
33+ template <typename Elem>
34+ iterator_range<repeat_iter<Elem>> repeat (
35+ const Elem & elem,
36+ size_t until=0 )
37+ // -1 causes it to repeat infintely
38+ {
39+ return iterator_range<repeat_iter<Elem>>(
40+ repeat_iter<Elem>(elem,until),
41+ repeat_iter<Elem>(elem,until));// just a dummy iter
42+ }
43+
44+ }
45+
46+ #endif // REPEAT_HPP
Original file line number Diff line number Diff line change @@ -5,3 +5,5 @@ testrange
55testslice
66testzip
77testreverse
8+ testrepeat
9+ testfilter
Original file line number Diff line number Diff line change @@ -17,7 +17,8 @@ TESTS = \
1717 testzip \
1818 testslice \
1919 testreverse \
20- testfilter
20+ testfilter \
21+ testrepeat
2122
2223all : $(TESTS )
2324
Original file line number Diff line number Diff line change 1+ #include " repeat.hpp"
2+ #include < iostream>
3+ #include < vector>
4+ #include < array>
5+ #include < string>
6+
7+ int main () {
8+ int a = 10 ;
9+ int i = 0 ;
10+ for (auto num : iter::repeat (a)) {// goes infintely
11+ std::cout << num << std::endl;
12+ ++i;
13+ if (i > 20 ) break ;
14+ }
15+ std::cout<<std::endl;
16+ for (auto num : iter::repeat (a,10 )) {// goes ten times
17+ std::cout << num << std::endl;
18+ }
19+ }
You can’t perform that action at this time.
0 commit comments