Jpp  17.2.1-pre0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Public Types | Public Member Functions | Public Attributes | Protected Attributes | List of all members
JTOOLS::JHashSet< JElement_t, JEvaluator_t > Class Template Reference

General purpose class for hash set of elements. More...

#include <JHashSet.hh>

Inheritance diagram for JTOOLS::JHashSet< JElement_t, JEvaluator_t >:
JTOOLS::JHashCollection< JElement_t, JEvaluator_t > std::vector< JElement_t >

Classes

struct  JComparator
 Auxiliary class for ordering of objects in the set by the hash value. More...
 

Public Types

typedef JElement_t value_type
 
typedef JEvaluator_t evaluator_type
 
typedef JHashCollection
< value_type, evaluator_type
collection_type
 
typedef
collection_type::container_type 
container_type
 
typedef
container_type::const_iterator 
const_iterator
 
typedef
container_type::const_reverse_iterator 
const_reverse_iterator
 
typedef container_type::iterator iterator
 
typedef
container_type::reverse_iterator 
reverse_iterator
 

Public Member Functions

 JHashSet (const JEvaluator_t &evaluator=JEvaluator_t())
 Constructor. More...
 
virtual bool insert (const value_type &element) override
 Insert element. More...
 
const JComparatorgetComparator () const
 Get comparator. More...
 
void clear ()
 Clear. More...
 
void swap (JHashCollection &collection)
 Swap hash collection. More...
 
template<class T >
const_iterator find (const T &value) const
 Find element with given value. More...
 
template<class T >
iterator find (const T &value)
 Find element with given value. More...
 
template<class T >
value_typeget (const T &value)
 Get element with given value. More...
 
template<class T >
const value_typeget (const T &value) const
 Get element with given value. More...
 
template<class T >
void insert (T __begin, T __end)
 Insert values. More...
 
void erase (iterator pos)
 Erase element at given position. More...
 
void erase (iterator __begin, iterator __end)
 Erase elements in given range. More...
 
template<class T >
bool erase (const T &value)
 Erase element with given value. More...
 
template<class T >
bool has (const T &value) const
 Test whether given value is present. More...
 
template<class T >
int getIndex (const T &value) const
 Get index of given value. More...
 

Public Attributes

JEvaluator_t getValue
 Function object for evaluation of element. More...
 

Protected Attributes

JComparator compare
 Function object for comparison. More...
 
JTOOLS::JHashCollection::router_type router
 

Detailed Description

template<class JElement_t, class JEvaluator_t = JHashEvaluator>
class JTOOLS::JHashSet< JElement_t, JEvaluator_t >

General purpose class for hash set of elements.

The elements in a hash set are sorted according to the specified evaluation. The evaluation of elements corresponds to a unary method returning an integer value for a given element; The default evaluator is JHashEvaluator.

Definition at line 30 of file JHashSet.hh.

Member Typedef Documentation

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
typedef JElement_t JTOOLS::JHashSet< JElement_t, JEvaluator_t >::value_type

Definition at line 35 of file JHashSet.hh.

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
typedef JEvaluator_t JTOOLS::JHashSet< JElement_t, JEvaluator_t >::evaluator_type

Definition at line 36 of file JHashSet.hh.

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
typedef JHashCollection<value_type, evaluator_type> JTOOLS::JHashSet< JElement_t, JEvaluator_t >::collection_type

Definition at line 38 of file JHashSet.hh.

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
typedef collection_type::container_type JTOOLS::JHashSet< JElement_t, JEvaluator_t >::container_type

Definition at line 39 of file JHashSet.hh.

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
typedef container_type::const_iterator JTOOLS::JHashSet< JElement_t, JEvaluator_t >::const_iterator

Definition at line 41 of file JHashSet.hh.

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
typedef container_type::const_reverse_iterator JTOOLS::JHashSet< JElement_t, JEvaluator_t >::const_reverse_iterator

Definition at line 42 of file JHashSet.hh.

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
typedef container_type::iterator JTOOLS::JHashSet< JElement_t, JEvaluator_t >::iterator

Definition at line 43 of file JHashSet.hh.

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
typedef container_type::reverse_iterator JTOOLS::JHashSet< JElement_t, JEvaluator_t >::reverse_iterator

Definition at line 44 of file JHashSet.hh.

Constructor & Destructor Documentation

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
JTOOLS::JHashSet< JElement_t, JEvaluator_t >::JHashSet ( const JEvaluator_t &  evaluator = JEvaluator_t())
inline

Constructor.

Parameters
evaluatorevaluator

Definition at line 87 of file JHashSet.hh.

87  :
89  compare(evaluator)
90  {}
JComparator compare
Function object for comparison.
Definition: JHashSet.hh:135
General purpose class for hash collection of unique elements.

Member Function Documentation

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
virtual bool JTOOLS::JHashSet< JElement_t, JEvaluator_t >::insert ( const value_type element)
inlineoverridevirtual

Insert element.

Parameters
elementelement
Returns
true if inserted; else false

Reimplemented from JTOOLS::JHashCollection< JElement_t, JEvaluator_t >.

Definition at line 99 of file JHashSet.hh.

100  {
101  const int ival = this->getValue(element);
102 
103  if (!this->router.has(ival)) {
104 
105  iterator p = container_type::insert(lower_bound(this->begin(), this->end(), element, compare), element);
106 
107  this->router.put(ival, std::distance(this->begin(), p));
108 
109  for (iterator i = p; ++i != this->end(); ) {
110  this->router.put(this->getValue(*i), std::distance(this->begin(), i));
111  }
112 
113  return true;
114  }
115 
116  return false;
117  }
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
container_type::iterator iterator
Definition: JHashSet.hh:43
JTOOLS::JHashCollection::router_type router
JComparator compare
Function object for comparison.
Definition: JHashSet.hh:135
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t , class JEvaluator_t = JHashEvaluator>
const JComparator& JTOOLS::JHashSet< JElement_t, JEvaluator_t >::getComparator ( ) const
inline

Get comparator.

Returns
comparator

Definition at line 125 of file JHashSet.hh.

126  {
127  return compare;
128  }
JComparator compare
Function object for comparison.
Definition: JHashSet.hh:135
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
void JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::clear ( )
inlineinherited

Clear.

Definition at line 108 of file JHashCollection.hh.

109  {
110  for (const_iterator i = this->begin(); i != this->end(); ++i) {
111  router.put(this->getValue(*i), router.getDefaultAddress());
112  }
113 
114  container_type::clear();
115  }
JTOOLS::JHashCollection::router_type router
container_type::const_iterator const_iterator
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
void JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::swap ( JHashCollection< JElement_t, JEvaluator_t > &  collection)
inlineinherited

Swap hash collection.

Parameters
collectionhash collection

Definition at line 123 of file JHashCollection.hh.

124  {
125  router.swap(collection.router);
126 
127  container_type::swap(collection);
128  }
JTOOLS::JHashCollection::router_type router
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
template<class T >
const_iterator JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::find ( const T value) const
inlineinherited

Find element with given value.

Parameters
valuevalue
Returns
position of element with given value or end()

Definition at line 138 of file JHashCollection.hh.

139  {
140  const int ival = this->getValue(value);
141 
142  if (router.has(ival))
143  return this->begin() + router.get(ival);
144  else
145  return this->end();
146  }
JTOOLS::JHashCollection::router_type router
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
template<class T >
iterator JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::find ( const T value)
inlineinherited

Find element with given value.

Parameters
valuevalue
Returns
position of element with given value or end()

Definition at line 156 of file JHashCollection.hh.

157  {
158  const int ival = this->getValue(value);
159 
160  if (router.has(ival))
161  return this->begin() + router.get(ival);
162  else
163  return this->end();
164  }
JTOOLS::JHashCollection::router_type router
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
template<class T >
value_type& JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::get ( const T value)
inlineinherited

Get element with given value.

This method will throw an exception if given value is not present following the prerequisite of constness.

Parameters
valuevalue
Returns
element

Definition at line 176 of file JHashCollection.hh.

177  {
178  const int ival = this->getValue(value);
179 
180  if (!router.has(ival)) {
181  this->insert(value);
182  }
183 
184  return container_type::operator[](router.get(ival)).second;
185  }
JTOOLS::JHashCollection::router_type router
virtual bool insert(const value_type &element)
Insert element.
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
template<class T >
const value_type& JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::get ( const T value) const
inlineinherited

Get element with given value.

This method will throw an exception if given value is not present following the prerequisite of constness.

Parameters
valuevalue
Returns
element

Definition at line 197 of file JHashCollection.hh.

198  {
199  const int ival = this->getValue(value);
200 
201  if (router.has(ival)) {
202  return container_type::operator[](router.get(ival)).second;
203  }
204 
205  THROW(JIndexOutOfRange, "JHasCollection::get(): invalid value.");
206  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:696
JTOOLS::JHashCollection::router_type router
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
template<class T >
void JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::insert ( T  __begin,
T  __end 
)
inlineinherited

Insert values.

Parameters
__beginbegin of values
__endend of values

Definition at line 239 of file JHashCollection.hh.

240  {
241  for (T i = __begin; i != __end; ++i) {
242  insert(*i);
243  }
244  }
virtual bool insert(const value_type &element)
Insert element.
do set_variable OUTPUT_DIRECTORY $WORKDIR T
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
void JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::erase ( iterator  pos)
inlineinherited

Erase element at given position.

Parameters
posvalid position

Definition at line 252 of file JHashCollection.hh.

253  {
254  router.put(this->getValue(*pos), router.getDefaultAddress());
255 
256  for (iterator i = container_type::erase(pos); i != this->end(); ++i) {
257  router.put(this->getValue(*i), distance(this->begin(), i));
258  }
259  }
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
JTOOLS::JHashCollection::router_type router
container_type::iterator iterator
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
void JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::erase ( iterator  __begin,
iterator  __end 
)
inlineinherited

Erase elements in given range.

Parameters
__beginbegin position (included)
__endend position (excluded)

Definition at line 268 of file JHashCollection.hh.

269  {
270  for (iterator i = __begin; i != __end; ++i) {
271  router.put(this->getValue(*i), router.getDefaultAddress());
272  }
273 
274  for (iterator i = container_type::erase(__begin, __end); i != this->end(); ++i) {
275  router.put(this->getValue(*i), distance(this->begin(), i));
276  }
277  }
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
JTOOLS::JHashCollection::router_type router
container_type::iterator iterator
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
template<class T >
bool JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::erase ( const T value)
inlineinherited

Erase element with given value.

Parameters
valuevalue
Returns
true if element has been erased; else false

Definition at line 287 of file JHashCollection.hh.

288  {
289  const int ival = this->getValue(value);
290 
291  if (router.has(ival)) {
292 
293  this->erase(this->begin() + router.get(ival));
294 
295  return true;
296  }
297 
298  return false;
299  }
JTOOLS::JHashCollection::router_type router
void erase(iterator pos)
Erase element at given position.
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
template<class T >
bool JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::has ( const T value) const
inlineinherited

Test whether given value is present.

Parameters
valuevalue
Returns
true if present; else false

Definition at line 309 of file JHashCollection.hh.

310  {
311  return router.has(this->getValue(value));
312  }
JTOOLS::JHashCollection::router_type router
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t, class JEvaluator_t = JHashEvaluator>
template<class T >
int JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::getIndex ( const T value) const
inlineinherited

Get index of given value.

Parameters
valuevalue
Returns
indecx

Definition at line 322 of file JHashCollection.hh.

323  {
324  return router.get(this->getValue(value));
325  }
JTOOLS::JHashCollection::router_type router
JEvaluator_t getValue
Function object for evaluation of element.

Member Data Documentation

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
JComparator JTOOLS::JHashSet< JElement_t, JEvaluator_t >::compare
protected

Function object for comparison.

Definition at line 135 of file JHashSet.hh.

template<class JElement_t, class JEvaluator_t = JHashEvaluator>
JEvaluator_t JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::getValue
inherited

Function object for evaluation of element.

Definition at line 331 of file JHashCollection.hh.

template<class JElement_t, class JEvaluator_t = JHashEvaluator>
JTOOLS::JHashCollection::router_type JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::router
protectedinherited

The documentation for this class was generated from the following file: