Jpp  17.2.1-pre0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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"
8 #include "JLang/JComparison.hh"
9 
10 #include "Jeep/JParser.hh"
11 #include "Jeep/JMessage.hh"
12 
13 
14 namespace {
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  */
75 int 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 }
Utility class to parse command line options.
Definition: JParser.hh:1517
debug
Definition: JMessage.hh:29
int main(int argc, char *argv[])
Definition: Main.cc:15
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
bool operator<(const Head &first, const Head &second)
Less than operator.
Definition: JHead.hh:1741
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
#define ASSERT(A,...)
Assert macro.
Definition: JMessage.hh:90
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1993
do set_variable OUTPUT_DIRECTORY $WORKDIR T
T make_set(T __begin, T __end, JResult_t std::iterator_traits< T >::value_type::*value, const JComparator_t &comparator)
Method to exclude outliers from already sorted data.
Definition: JVectorize.hh:169
Auxiliary methods to convert data members or return values of member methods of a set of objects to a...
print
Definition: JConvertDusj.sh:44
General purpose messaging.
#define FATAL(A)
Definition: JMessage.hh:67
Utility class to parse command line options.
std::ostream & operator<<(std::ostream &stream, const CLBCommonHeader &header)
int debug
debug level