Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Public Types | Public Member Functions | Public Attributes | Protected Member Functions | 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
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
 
typedef std::pair
< const_iterator, bool > 
pair_type
 

Public Member Functions

 JHashSet (const JEvaluator_t &evaluator=JEvaluator_t())
 Constructor. More...
 
virtual pair_type insert (typename JClass< value_type >::argument_type element)
 Insert element. More...
 
const JComparatorgetComparator () const
 Get comparator. More...
 
virtual void clear ()
 Clear. 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...
 
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...
 

Public Attributes

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

Protected Member Functions

iterator insert (iterator pos, typename JClass< value_type >::argument_type element)
 Insert element. More...
 

Protected Attributes

JComparator compare
 Function object for comparison. More...
 
JRouter< int > 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 34 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 39 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 40 of file JHashSet.hh.

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

Definition at line 42 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 44 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 45 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 46 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 47 of file JHashSet.hh.

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
typedef std::pair<const_iterator, bool> JTOOLS::JHashSet< JElement_t, JEvaluator_t >::pair_type

Definition at line 49 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 93 of file JHashSet.hh.

93  :
94  container_type(evaluator),
95  compare (evaluator)
96  {}
JHashCollection< value_type, evaluator_type > container_type
Definition: JHashSet.hh:42
JComparator compare
Function object for comparison.
Definition: JHashSet.hh:145

Member Function Documentation

template<class JElement_t , class JEvaluator_t = JHashEvaluator>
virtual pair_type JTOOLS::JHashSet< JElement_t, JEvaluator_t >::insert ( typename JClass< value_type >::argument_type  element)
inlinevirtual

Insert element.

Parameters
elementelement
Returns
(position, status), where status is true if inserted; else false

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

Definition at line 105 of file JHashSet.hh.

106  {
107  using namespace std;
108 
109  const int ival = this->getValue(element);
110 
111  if (!this->router.has(ival)) {
112 
113  iterator i = container_type::insert(lower_bound(this->begin(), this->end(), element, compare), element);
114 
115  this->router.put(ival, distance(this->begin(), i));
116 
117  for (iterator __i = i; ++__i != this->end(); ) {
118  this->router.put(this->getValue(*__i), distance(this->begin(), __i));
119  }
120 
121  return pair_type(i, true);
122 
123  } else {
124 
125  return pair_type(this->end(), false);
126  }
127  }
std::pair< const_iterator, bool > pair_type
Definition: JHashSet.hh:49
virtual pair_type insert(typename JClass< value_type >::argument_type element)
Insert element.
JComparator compare
Function object for comparison.
Definition: JHashSet.hh:145
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 135 of file JHashSet.hh.

136  {
137  return compare;
138  }
JComparator compare
Function object for comparison.
Definition: JHashSet.hh:145
template<class JElement_t , class JEvaluator_t = JHashEvaluator>
virtual void JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::clear ( )
inlinevirtualinherited

Clear.

Definition at line 78 of file JHashCollection.hh.

79  {
80  // reset internal router
81 
82  for (iterator i = this->begin(); i != this->end(); ++i) {
83  router.put(this->getValue(*i), router.getDefaultAddress());
84  }
85 
86  container_type::clear();
87  }
JEvaluator_t getValue
Function object for evaluation of element.
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 97 of file JHashCollection.hh.

98  {
99  const int ival = this->getValue(value);
100 
101  if (router.has(ival)) {
102 
103  const_iterator i = this->begin();
104 
105  std::advance(i, router.get(ival));
106 
107  return i;
108  }
109 
110  return this->end();
111  }
container_type::const_iterator const_iterator
counter_type advance(counter_type &counter, const counter_type value, const counter_type limit=std::numeric_limits< counter_type >::max())
Advance counter.
Definition: JCounter.hh:35
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 121 of file JHashCollection.hh.

122  {
123  const int ival = this->getValue(value);
124 
125  if (router.has(ival)) {
126 
127  iterator i = this->begin();
128 
129  std::advance(i, router.get(ival));
130 
131  return i;
132  }
133 
134  return this->end();
135  }
counter_type advance(counter_type &counter, const counter_type value, const counter_type limit=std::numeric_limits< counter_type >::max())
Advance counter.
Definition: JCounter.hh:35
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 147 of file JHashCollection.hh.

148  {
149  const int ival = this->getValue(value);
150 
151  if (!this->router.has(ival)) {
152  this->insert(value);
153  }
154 
155  return container_type::operator[](router.get(ival)).second;
156  }
virtual pair_type insert(typename JClass< value_type >::argument_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 168 of file JHashCollection.hh.

169  {
170  const int ival = this->getValue(value);
171 
172  if (router.has(ival))
173  return container_type::operator[](router.get(ival)).second;
174  else
175  THROW(JIndexOutOfRange, "JHasCollection::get(): invalid value.");
176  }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:633
JEvaluator_t getValue
Function object for evaluation of element.
template<class JElement_t , class JEvaluator_t = JHashEvaluator>
iterator JTOOLS::JHashCollection< JElement_t, JEvaluator_t >::insert ( iterator  pos,
typename JClass< value_type >::argument_type  element 
)
inlineprotectedinherited

Insert element.

Parameters
posposition
elementelement
Returns
position

Definition at line 340 of file JHashCollection.hh.

341  {
342  return container_type::insert(pos, element);
343  }
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 213 of file JHashCollection.hh.

214  {
215  this->router.put(this->getValue(*pos), this->router.getDefaultAddress());
216 
217  iterator i = container_type::erase(pos);
218 
219  for ( ; i != this->end(); ++i) {
220  this->router.put(this->getValue(*i), distance(this->begin(), i));
221  }
222  }
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 231 of file JHashCollection.hh.

232  {
233  for (iterator i = __begin; i != __end; ++i) {
234  this->router.put(this->getValue(*i), this->router.getDefaultAddress());
235  }
236 
237  iterator i = container_type::erase(__begin, __end);
238 
239  for ( ; i != this->end(); ++i) {
240  this->router.put(this->getValue(*i), distance(this->begin(), i));
241  }
242  }
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 252 of file JHashCollection.hh.

253  {
254  const int ival = this->getValue(value);
255 
256  if (this->router.has(ival)) {
257 
258  iterator pos = this->begin();
259 
260  std::advance(pos, this->router.get(ival));
261 
262  this->erase(pos);
263 
264  return true;
265  }
266 
267  return false;
268  }
void erase(iterator pos)
Erase element at given position.
counter_type advance(counter_type &counter, const counter_type value, const counter_type limit=std::numeric_limits< counter_type >::max())
Advance counter.
Definition: JCounter.hh:35
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 278 of file JHashCollection.hh.

279  {
280  return router.has(this->getValue(value));
281  }
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 145 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 329 of file JHashCollection.hh.

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

Definition at line 345 of file JHashCollection.hh.


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