C++ Library Extensions 2022.12.09
To help learn modern C++ programming
make_sequence.cpp
Go to the documentation of this file.
1/*
2 Author: Thomas Kim
3 First Edit: Feb. 03, 2021
4
5 Requirements: C++ compilers that supports C++17 Standards
6
7 clang++ -std=c++17 filename.cpp -ltbb -o output.exe
8 g++ -std=c++17 filename.cpp -ltbb -o output.exe
9 cl /EHsc /std:c++17 filename.cpp /Fe: output.exe
10 dpcpp -Qstd=c++17 filename.cpp -o output.exe
11*/
12
13#include <tpf_output.hpp>
14
15namespace types = tpf::types;
16
18auto& endl = tpf::endl; // one carriage-return and flush out to console
19auto& endL = tpf::endL; // two carriage-returns and flush out to console
20
22{
23 stream <<"\n--- Generating sequence is the very first step in C++ Compile-Time Programming!"<< endL;
24
25 stream << "--- make_sequence_t<InOrderSequence, 10>" << endl;
27 stream << seq_t1{} << endL;
28
29 stream << "--- make_sequence_t<InOrderSequence, 0, 20>" << endl;
31 stream << seq_t2{} << endL;
32
33 stream << "--- make_sequence_t<InOrderSequence, 0, 20, 2>" << endl;
35 stream << seq_t3{} << endL;
36
37 stream << "--- make_sequence_t<InOrderSequence, 20, 0, -1>" << endl;
38 using seq_t4 = types::make_sequence_t<types::InOrderSequence, 20, 0, -1>;
39 stream << seq_t4{} << endL;
40
41 stream << "--- make_sequence_t<InOrderSequence, 19, 0, -1>" << endl;
42 using seq_t5 = types::make_sequence_t<types::InOrderSequence, 19, 0, -1>;
43 stream << seq_t5{} << endL;
44
45 stream << "--- make_sequence_t<InOrderSequence, 20, -1, -2>" << endl;
46 using seq_t6 = types::make_sequence_t<types::InOrderSequence, 20, -1, -2>;
47 stream << seq_t6{} << endL;
48
49 stream << "--- make_sequence_t<InOrderSequence, 19, -1, -2>" << endl;
50 using seq_t7 = types::make_sequence_t<types::InOrderSequence, 19, -1, -2>;
51 stream << seq_t7{} << endL;
52
53 stream << "--- make_sequence_t<ReverseSequence, 10>" << endl;
55 stream << seq_t8{} << endL;
56
57 stream << "--- make_sequence_t<ReverseSequence, 0, 20>" << endl;
59 stream << seq_t9{} << endL;
60
61 stream << "--- make_sequence_t<ReverseSequence, 0, 20, 2>" << endl;
63 stream << seq_t10{} << endL;
64
65 stream << "--- make_sequence_t<ReverseSequence, 20, 0, -1>" << endl;
66 using seq_t11 = types::make_sequence_t<types::ReverseSequence, 20, 0, -1>;
67 stream << seq_t11{} << endL;
68
69 stream << "--- make_sequence_t<ReverseSequence, 19, 0, -1>" << endl;
70 using seq_t12 = types::make_sequence_t<types::ReverseSequence, 19, 0, -1>;
71 stream << seq_t12{} << endL;
72
73 stream << "--- make_sequence_t<ReverseSequence, 20, -1, -2>" << endl;
74 using seq_t13 = types::make_sequence_t<types::ReverseSequence, 20, -1, -2>;
75 stream << seq_t13{} << endL;
76
77 stream << "--- make_sequence_t<ReverseSequence, 19, -1, -2>" << endl;
78 using seq_t14 = types::make_sequence_t<types::ReverseSequence, 19, -1, -2>;
79 stream << seq_t14{} << endL;
80}
81
83{
84 stream <<"--- Retrieving information of the existing sequence is also important!!" << endL;
85
86 stream <<" sequence = make_sequence_t<types::InOrderSequence, -10, 10, 1>"<<endl;
88 stream << " sequence = " << sequence{} << endL;
89
90 stream <<" --- sequence_first_element_v<sequence>"<<endl;
91 constexpr auto seq_1_first = types::sequence_first_element_v<sequence>;
92 stream <<" First Element: " << seq_1_first << endL;
93
94 stream <<" --- sequence_last_element_v<sequence>"<<endl;
95 constexpr auto seq_1_last = types::sequence_last_element_v<sequence>;
96 stream <<" Last Element: " << seq_1_last << endL;
97
98 stream <<" --- sequence_element_count_v<sequence>"<<endl;
99 constexpr auto seq_1_count = types::sequence_element_count_v<sequence>;
100 stream <<" Count of Elements: " << seq_1_count << endL;
101
102 stream <<" --- sequence_nth_element_v<0, sequence>"<<endl;
103 constexpr auto seq_1_0th_element = types::sequence_nth_element_v<0, sequence>;
104 stream <<" 0-th Element: " << seq_1_0th_element << endL;
105
106 stream <<" --- types::sequence_nth_element_v<5, sequence>"<<endl;
107 constexpr auto seq_1_5th_element = types::sequence_nth_element_v<5, sequence>;
108 stream <<" 5-th Element: " << seq_1_5th_element << endL;
109
110 stream <<" --- types::sequence_nth_element_v<18, sequence>"<<endl;
111 constexpr auto seq_1_18th_element = types::sequence_nth_element_v<18, sequence>;
112 stream <<" 18-th Element: " << seq_1_18th_element << endL;
113
114 stream <<" --- sequence_span_v<sequence>"<<endl;
115 constexpr auto seq_1_span = types::sequence_span_v<sequence>;
116 stream <<" Span (Distance Between 2 Elements): " << seq_1_span << endL;
117
118 stream <<" By using reversed_sequence = reverse_sequence_t<sequence>" << endl;
119 stream <<" the original sequence: " << sequence{} <<endl;
120 using reversed_sequence = types::reverse_sequence_t<sequence>;
121 stream <<" is now reversed as show: " << reversed_sequence{} <<endL;
122
123 stream <<"\t\t--- By Thomas Kim, Feb. 05, 2020. ---" << endl;
124}
125
126int main()
127{
129
131}
auto & endl
tpf::sstream stream
void test_sequence_information()
auto & endL
void test_make_sequence()
int main()
std::integer_sequence< std::common_type_t< std::remove_cvref_t< decltype(Indices)>... >, Indices... > sequence
Definition: cpg_types.hpp:2665
Type to string name conversions are defined.
Definition: 31-visit.cpp:7
typename hidden::st_create_workhorse_range< SequenceInOrder, RangeValues... >::type make_sequence_t
Definition: tpf_types.hpp:2668
constexpr bool InOrderSequence
Definition: tpf_types.hpp:2336
hidden::reverse_sequence_t< remove_cvref_t< SequenceType > > reverse_sequence_t
Definition: tpf_types.hpp:2519
constexpr bool ReverseSequence
Definition: tpf_types.hpp:2337
constexpr auto endL
Definition: tpf_output.hpp:974
constexpr auto endl
Definition: tpf_output.hpp:973
Stream output operators << are implemented.