Jpp  16.0.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JHashMapToolkit.hh
Go to the documentation of this file.
1 #ifndef __JTOOLS__JHASHMAPTOOLKIT__
2 #define __JTOOLS__JHASHMAPTOOLKIT__
3 
4 #include <limits>
5 
6 #include "JTools/JHashMap.hh"
7 
8 
9 /**
10  * \file
11  *
12  * Arithmetic toolkit for hash maps.
13  * \author mdejong
14  */
15 namespace JTOOLS {}
16 namespace JPP { using namespace JTOOLS; }
17 
18 namespace JTOOLS {
19 
20  /**
21  * Toolkit for JHashMap.
22  *
23  * The various pointers to member functions refer to policy methods used in base class JMATH::JMath.
24  */
25  struct JHashMapToolkit {
26  /**
27  * Reset buffer.
28  *
29  * \param buffer buffer
30  */
31  template<class JKey_t, class JValue_t, class JEvaluator_t>
33  {
34  for (typename JHashMap<JKey_t, JValue_t, JEvaluator_t>::iterator i = buffer.begin(); i != buffer.end(); ++i) {
35  i->second = JValue_t();
36  }
37  }
38 
39 
40  /**
41  * Set values in target corresponding to keys in source.
42  *
43  * \param target target buffer
44  * \param source source buffer
45  * \param value value
46  */
47  template<class JKey_t, class JValue_t, class JEvaluator_t>
50  const JValue_t& value)
51  {
52  target.clear();
53 
54  for (typename JHashMap<JKey_t, JValue_t, JEvaluator_t>::const_iterator i = source.begin(); i != source.end(); ++i) {
55  target[i->first] = value;
56  }
57  }
58 
59 
60  /**
61  * Evaluate arithmetic operation on buffer.
62  *
63  * \param buffer buffer
64  * \param f1 operation
65  */
66  template<class JKey_t, class JValue_t, class JEvaluator_t>
68  JValue_t& (JValue_t::*f1)())
69  {
70  for (typename JHashMap<JKey_t, JValue_t, JEvaluator_t>::iterator i = buffer.begin(); i != buffer.end(); ++i) {
71  (i->second.*f1)();
72  }
73  }
74 
75 
76  /**
77  * Evaluate arithmetic operation on buffers.
78  *
79  * \param first first buffer
80  * \param second second buffer
81  * \param f1 operation
82  */
83  template<class JKey_t, class JValue_t, class JEvaluator_t>
86  JValue_t& (JValue_t::*f1)(const JValue_t&))
87  {
88  for (typename JHashMap<JKey_t, JValue_t, JEvaluator_t>::const_iterator i = second.begin(); i != second.end(); ++i) {
89  (first[i->first].*f1)(i->second);
90  }
91  }
92 
93 
94  /**
95  * Evaluate arithmetic operation on buffer.
96  *
97  * \param buffer buffer
98  * \param f1 operation
99  * \param factor factor
100  */
101  template<class JKey_t, class JValue_t, class JEvaluator_t>
103  JValue_t& (JValue_t::*f1)(const double),
104  const double factor)
105  {
106  for (typename JHashMap<JKey_t, JValue_t, JEvaluator_t>::iterator i = buffer.begin(); i != buffer.end(); ++i) {
107  (i->second.*f1)(factor);
108  }
109  }
110 
111 
112  /**
113  * Check equality of buffers.
114  *
115  * \param first first buffer
116  * \param second second buffer
117  * \return true if buffers are equal; else false
118  */
119  template<class JKey_t, class JValue_t, class JEvaluator_t>
122  {
124  p = first .begin(),
125  q = second.begin(); ; ++p, ++q) {
126 
127  if (p != first.end() && q != second.end()) {
128 
129  if (p->first != q->first || p->second != q->second) {
130  return false;
131  }
132 
133  } else if (p == first.end() && q == second.end()) {
134 
135  return true;
136 
137  } else {
138 
139  return false;
140  }
141  }
142  }
143 
144 
145  /**
146  * Check equality of buffers.
147  *
148  * \param first first buffer
149  * \param second second buffer
150  * \param precision precision
151  * \return true if buffers are equal; else false
152  */
153  template<class JKey_t, class JValue_t, class JEvaluator_t>
156  const double precision)
157  {
159  p = first .begin(),
160  q = second.begin(); ; ++p, ++q) {
161 
162  if (p != first.end() && q != second.end()) {
163 
164  if (p->first != q->first || !p->second.equals(q->second, precision)) {
165  return false;
166  }
167 
168  } else if (p == first.end() && q == second.end()) {
169 
170  return true;
171 
172  } else {
173 
174  return false;
175  }
176  }
177  }
178  };
179 }
180 
181 #endif
virtual void clear() override
Clear.
Definition: JHashMap.hh:107
General purpose class for hash map of unique keys.
Definition: JHashMap.hh:72
static void evaluate(JHashMap< JKey_t, JValue_t, JEvaluator_t > &first, const JHashMap< JKey_t, JValue_t, JEvaluator_t > &second, JValue_t &(JValue_t::*f1)(const JValue_t &))
Evaluate arithmetic operation on buffers.
General purpose class for hash map of unique elements.
static void evaluate(JHashMap< JKey_t, JValue_t, JEvaluator_t > &buffer, JValue_t &(JValue_t::*f1)(const double), const double factor)
Evaluate arithmetic operation on buffer.
static void evaluate(JHashMap< JKey_t, JValue_t, JEvaluator_t > &buffer, JValue_t &(JValue_t::*f1)())
Evaluate arithmetic operation on buffer.
static void reset(JHashMap< JKey_t, JValue_t, JEvaluator_t > &buffer)
Reset buffer.
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
static void set(JHashMap< JKey_t, JValue_t, JEvaluator_t > &target, const JHashMap< JKey_t, JValue_t, JEvaluator_t > &source, const JValue_t &value)
Set values in target corresponding to keys in source.
static bool equals(const JHashMap< JKey_t, JValue_t, JEvaluator_t > &first, const JHashMap< JKey_t, JValue_t, JEvaluator_t > &second)
Check equality of buffers.
Toolkit for JHashMap.
container_type::const_iterator const_iterator
Definition: JHashMap.hh:86
static bool equals(const JHashMap< JKey_t, JValue_t, JEvaluator_t > &first, const JHashMap< JKey_t, JValue_t, JEvaluator_t > &second, const double precision)
Check equality of buffers.
container_type::iterator iterator
Definition: JHashMap.hh:88