Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
JSetize.cc
Go to the documentation of this file.
1
2#include <iostream>
3#include <iomanip>
4#include <vector>
5#include <algorithm>
6
7#include "JLang/JVectorize.hh"
9
10#include "Jeep/JParser.hh"
11#include "Jeep/JMessage.hh"
12
13
14namespace {
15
16 struct __A__
17 {
18 __A__() :
19 i(0)
20 {}
21
22 __A__(const int __i) :
23 i(__i)
24 {}
25
26 friend inline bool operator<(const __A__& first, const __A__& second)
27 {
28 return first.i < second.i;
29 }
30
31 friend inline std::ostream& operator<<(std::ostream& out, const __A__& object)
32 {
33 return out << object.i;
34 }
35
36 int i;
37 };
38
39
40 /**
41 * Print data.
42 *
43 * \param out output stream
44 * \param debug debug level
45 * \param message message
46 * \param N number of elements
47 * \param p pointer to data
48 */
49 template<class T>
50 void inline print(std::ostream& out, int debug, const char* const message, int N, T* p)
51 {
52 using namespace std;
53 using namespace JPP;
54
55 if (debug >- debug_t) {
56
57 cout << setw(10) << left << message;
58
59 for (int i = 0; i != N; ++i) {
60 out << ' ' << setw(2) << p[i];
61 }
62
63 cout << endl;
64 }
65 }
66}
67
68
69/**
70 * \file
71 *
72 * Example program to test JLANG::make_set method.
73 * \author mdejong
74 */
75int main(int argc, char **argv)
76{
77 using namespace std;
78
79 int debug;
80
81 try {
82
83 JParser<> zap("Example program to test selection of ordered data.");
84
85 zap['d'] = make_field(debug) = 3;
86
87 zap(argc, argv);
88 }
89 catch(const exception &error) {
90 FATAL(error.what() << endl);
91 }
92
93
94 using namespace JPP;
95
96 vector<__A__> buffer;
97
98 int numberOfElements = 5;
99
100 for (int i = 0; i != numberOfElements; ++i) {
101 buffer.push_back(__A__(i));
102 }
103
104 print(cout, debug, "original:", numberOfElements, buffer.data());
105
106 for (int index = 0; index != numberOfElements -1; ++ index) {
107
108 buffer[index].i += 1;
109
110 print(cout, debug, "before:", numberOfElements, buffer.data());
111
112 const int N = distance(buffer.begin(), make_set(buffer.begin(), buffer.end(), &__A__::i, JComparison::lt()));
113
114 print(cout, debug, "after:", N, buffer.data());
115
116 ASSERT(N == numberOfElements - 1);
117
118 for (int i = 0; i != index; ++i) {
119 ASSERT(buffer[i].i == i);
120 }
121
122 for (int i = index; i != N; ++i) {
123 ASSERT(buffer[i].i == i+1);
124 }
125
126 buffer[N].i = index;
127
128 sort(buffer.begin(), buffer.end());
129 }
130
131 {
132 const int index = numberOfElements - 1;
133
134 buffer[index].i += 1;
135
136 print(cout, debug, "before:", numberOfElements, buffer.data());
137
138 const int N = distance(buffer.begin(), make_set(buffer.begin(), buffer.end(), &__A__::i, JComparison::lt()));
139
140 print(cout, debug, "after:", N, buffer.data());
141
142 ASSERT(N == numberOfElements);
143
144 buffer[index].i = index;
145 }
146
147 {
148 const int index = 0;
149
150 buffer[index].i -= 1;
151
152 print(cout, debug, "before:", numberOfElements, buffer.data());
153
154 const int N = distance(buffer.begin(), make_set(buffer.begin(), buffer.end(), &__A__::i, JComparison::lt()));
155
156 print(cout, debug, "after:", N, buffer.data());
157
158 ASSERT(N == numberOfElements);
159
160 buffer[index].i = index;
161 }
162
163 for (int index = 1; index != numberOfElements; ++ index) {
164
165 buffer[index].i -= 1;
166
167 print(cout, debug, "before:", numberOfElements, buffer.data());
168
169 const int N = distance(buffer.begin(), make_set(buffer.begin(), buffer.end(), &__A__::i, JComparison::lt()));
170
171 print(cout, debug, "after:", N, buffer.data());
172
173 ASSERT(N == numberOfElements - 1);
174
175 for (int i = 0; i != index; ++i) {
176 ASSERT(buffer[i].i == i);
177 }
178
179 for (int i = index; i != N; ++i) {
180 ASSERT(buffer[i].i == i+1);
181 }
182
183 buffer[N].i = index;
184
185 sort(buffer.begin(), buffer.end());
186 }
187
188 return 0;
189}
bool operator<(const Status_Item &first, const Status_Item &second)
comparator for Status item; earliest hit first
Definition Ars.hh:413
General purpose messaging.
#define ASSERT(A,...)
Assert macro.
Definition JMessage.hh:90
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
int main(int argc, char **argv)
Definition JSetize.cc:75
void print(const TH1 &h1, std::ostream &out)
Print histogram parameters.
Auxiliary methods to convert data members or return values of member methods of a set of objects to a...
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Utility class to parse command line options.
Definition JParser.hh:1698
std::ostream & operator<<(std::ostream &stream, const CLBCommonHeader &header)
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).