Skip to content

Commit e6492b8

Browse files
committed
Move utility functions to end of file
1 parent 33eb23e commit e6492b8

File tree

1 file changed

+43
-42
lines changed

1 file changed

+43
-42
lines changed

test.cpp

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,50 +6,10 @@
66
#include <vector>
77

88
template <typename R>
9-
void print_range(R const& range) {
10-
using T = typename std::iterator_traits<decltype(range.begin())>::value_type;
11-
std::copy(range.begin(), range.end(), std::ostream_iterator<T>(std::cout, " "));
12-
std::cout << "\n";
13-
}
9+
void print_range(R const& range);
1410

1511
template <typename R>
16-
std::size_t manual_range_size(R const& range) {
17-
std::size_t size = 0;
18-
for (auto const& _ : range) ++size, (void) _;
19-
return size;
20-
}
21-
22-
namespace util { namespace lang {
23-
24-
// template <typename T>
25-
// struct is_a_step_range : std::false_type {};
26-
27-
// template <typename T>
28-
// struct is_a_step_range<typename range_proxy<T>::step_range_proxy> : std::true_type {};
29-
30-
template <typename T>
31-
std::ostream& operator <<(std::ostream& out, step_range_proxy<T> const& r) {
32-
return out << "range(" << *r.begin() << ", " << *r.end() << ")"
33-
<< ".step(" << r.begin().step_ << ")";
34-
}
35-
36-
template <typename T>
37-
std::ostream& operator <<(std::ostream& out, range_proxy<T> const& r) {
38-
return out << "range(" << *r.begin() << ", " << *r.end() << ")";
39-
}
40-
41-
}}
42-
43-
template <typename R>
44-
void test_range_size(R const& range) {
45-
auto const real_size = manual_range_size(R{range});
46-
if (real_size == range.size()) {
47-
std::cout << range << ".size() = " << real_size << "\n";
48-
} else {
49-
std::cout << "ERROR: " << range << ".size() ≠ " << real_size
50-
<< " (was " << range.size() << ")!\n";
51-
}
52-
}
12+
void test_range_size(R const& range);
5313

5414
int main() {
5515
using std::cout;
@@ -110,3 +70,44 @@ int main() {
11070
test_range_size(range(0.1, 0.11).step(2));
11171
test_range_size(range(-7, 1).step(7));
11272
}
73+
74+
namespace util { namespace lang {
75+
76+
template <typename T>
77+
std::ostream& operator <<(std::ostream& out, step_range_proxy<T> const& r) {
78+
return out << "range(" << *r.begin() << ", " << *r.end() << ")"
79+
<< ".step(" << r.begin().step_ << ")";
80+
}
81+
82+
template <typename T>
83+
std::ostream& operator <<(std::ostream& out, range_proxy<T> const& r) {
84+
return out << "range(" << *r.begin() << ", " << *r.end() << ")";
85+
}
86+
87+
}}
88+
89+
template <typename R>
90+
void print_range(R const& range) {
91+
using T = typename std::iterator_traits<decltype(range.begin())>::value_type;
92+
std::cout << range << " = ";
93+
std::copy(range.begin(), range.end(), std::ostream_iterator<T>(std::cout, " "));
94+
std::cout << "\n";
95+
}
96+
97+
template <typename R>
98+
std::size_t manual_range_size(R const& range) {
99+
std::size_t size = 0;
100+
for (auto const& _ : range) ++size, (void) _;
101+
return size;
102+
}
103+
104+
template <typename R>
105+
void test_range_size(R const& range) {
106+
auto const real_size = manual_range_size(R{range});
107+
if (real_size == range.size()) {
108+
std::cout << range << ".size() = " << real_size << "\n";
109+
} else {
110+
std::cout << "ERROR: " << range << ".size() ≠ " << real_size
111+
<< " (was " << range.size() << ")!\n";
112+
}
113+
}

0 commit comments

Comments
 (0)