Jpp 19.3.0-rc.3
the software that should make you happy
Loading...
Searching...
No Matches
JHashCollection.cc File Reference

Example program to test JTOOLS::JHashCollection class. More...

#include <iostream>
#include <iomanip>
#include <cmath>
#include <set>
#include "JTools/JHashCollection.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to test JTOOLS::JHashCollection class.

Author
mdejong

Definition in file JHashCollection.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 54 of file JHashCollection.cc.

55{
56 using namespace std;
57
58 double precision;
59 int debug;
60
61 try {
62
63 JParser<> zap("Example program to test hash collection.");
64
65 zap['e'] = make_field(precision) = 1.0e-3;
66 zap['d'] = make_field(debug) = 3;
67
68 zap(argc, argv);
69 }
70 catch(const exception &error) {
71 FATAL(error.what() << endl);
72 }
73
74
75 using namespace JPP;
76
77 typedef JHashCollection<double, get_value> hash_collection;
78
79 hash_collection buffer(precision);
80
81
82 set<double> input = { 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0 };
83 set<double> rm = { 1.5, 1.1 };
84
85 for (set<double>::const_reverse_iterator x = input.rbegin(); x != input.rend(); ++x) {
86 buffer.insert(*x);
87 buffer.insert(*x);
88 }
89
90 for (hash_collection::const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
91 DEBUG(FIXED(5,2) << *i << endl);
92 }
93
94 ASSERT(buffer.size() == input.size(), "Test of buffer size with multiple inserts of same element.");
95
96
97 for (set<double>::const_iterator x = input.begin(); x != input.end(); ++x) {
98
99 DEBUG(FIXED(5,2) << *x << ' ' << buffer.getIndex(*x) << endl);
100
101 ASSERT(buffer.has(*x), "Test of buffer content.");
102 }
103
104 {
105 hash_collection out(precision);
106
107 out = buffer;
108
109 for (set<double>::const_iterator x = input.begin(); x != input.end(); ++x) {
110
111 DEBUG(FIXED(5,2) << *x << ' ' << out.getIndex(*x) << endl);
112
113 ASSERT(out.has(*x), "Test of buffer content after assignment.");
114 }
115 }
116
117 for (set<double>::const_iterator x = rm.begin(); x != rm.end(); ++x) {
118
119 hash_collection::iterator p = buffer.find(*x);
120
121 DEBUG("find " << FIXED(5,2) << *x << " at position " << distance(buffer.begin(),p) << ' ' << buffer.getIndex(*x) << endl);
122
123 buffer.erase(p);
124 }
125
126 for (set<double>::const_iterator x = input.begin(); x != input.end(); ++x) {
127
128 ASSERT(buffer.has(*x) == (rm.count(*x) == 0), "Test of buffer content after erase.");
129 }
130
131 return 0;
132}
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define ASSERT(A,...)
Assert macro.
Definition JMessage.hh:90
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
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
General purpose class for hash collection of unique elements.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448