OGLplus  (0.59.0) a C++ wrapper for rendering APIs

sorting_network_io.hpp
Go to the documentation of this file.
1 
9 #ifndef EAGINE_SORTING_NETWORK_IO_HPP
10 #define EAGINE_SORTING_NETWORK_IO_HPP
11 
12 #include "integer_range.hpp"
13 #include "sorting_network.hpp"
14 #include <iostream>
15 
16 namespace eagine {
17 
18 template <typename SortingNetwork>
19 static inline std::ostream&
20 print_sorting_network(std::ostream& out, const SortingNetwork& sn) {
21  for(auto r : integer_range(sn.rounds())) {
22  for(auto j : integer_range(sn.size())) {
23  span_size_t j = sn.index(r, i);
24 
25  if(i < j) {
26  for(auto m : integer_range(sn.size())) {
27  span_size_t k = sn.size() - m - 1;
28  if(i == k) {
29  if(sn.min(r, i, j)) {
30  out << 'o';
31  } else {
32  out << '>';
33  }
34  } else if(j == k) {
35  if(sn.max(r, i, j)) {
36  out << 'o';
37  } else {
38  out << '<';
39  }
40  } else {
41  if((i < k) && (k <= j)) {
42  out << '+';
43  } else {
44  out << '|';
45  }
46  }
47 
48  if((i < k) && (k <= j)) {
49  out << '-';
50  } else {
51  out << ' ';
52  }
53  }
54  out << std::endl;
55  }
56  }
57  out << "=";
58  for(auto k : integer_range(1, sn.size())) {
59  out << "==";
60  }
61  out << std::endl;
62  }
63  return out;
64 }
65 
66 } // namespace eagine
67 
68 #endif // EAGINE_SORTING_NETWORK_IO_HPP
std::ptrdiff_t span_size_t
Signed span size type used by eagine.
Definition: types.hpp:36
Common code is placed in this namespace.
Definition: eagine.hpp:21
integer_range(B, E) -> integer_range< std::common_type_t< B, E >>
Deduction guide for integer_range.

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).