Skip to content

Commit 8d09a86

Browse files
committed
Did repeat
1 parent 11f93db commit 8d09a86

4 files changed

Lines changed: 69 additions & 1 deletion

File tree

repeat.hpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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

tests/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ testrange
55
testslice
66
testzip
77
testreverse
8+
testrepeat
9+
testfilter

tests/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ TESTS = \
1717
testzip \
1818
testslice \
1919
testreverse \
20-
testfilter
20+
testfilter \
21+
testrepeat
2122

2223
all: $(TESTS)
2324

tests/testrepeat.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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+
}

0 commit comments

Comments
 (0)