CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
edm::TrieNode< T > Class Template Reference

this class represent the node of a trie, it contains a link to a sub node and a link to a brother (node which have the same father) More...

#include <Trie.h>

Public Types

typedef TrieNodeIter< Tconst_iterator
 

Public Member Functions

void addSubNode (unsigned char chr, TrieNode< T > *node)
 
TrieNodeIter< Tbegin () const
 initialize subnode iterator (std conforming) More...
 
const TrieNode< T > * brother () const
 get brother (return 0x0 this node has no brother) More...
 
TrieNode< T > * brother ()
 
unsigned char brotherLabel () const
 get brother label More...
 
void clear ()
 clear content of TrieNode More...
 
void display (std::ostream &os, unsigned offset, unsigned char label) const
 display content of node in output stream More...
 
TrieNodeIter< Tend () const
 mark end of iteration (std conforming) More...
 
void setValue (const T &val)
 set value associed to node More...
 
const TrieNode< T > * subNode () const
 
TrieNode< T > * subNode ()
 
const TrieNode< T > * subNodeByLabel (unsigned char chr) const
 
TrieNode< T > * subNodeByLabel (unsigned char chr)
 
unsigned char subNodeLabel () const
 
 TrieNode ()
 
const Tvalue () const
 get value associed to node More...
 
 ~TrieNode ()
 

Private Member Functions

void _addBrother (unsigned char chr, TrieNode< T > *brother)
 add a new brother More...
 
const TrieNode< T > * _getBrother (unsigned char chr) const
 
TrieNode< T > * _getBrother (unsigned char chr)
 
template<typename Node >
Node _sequentialSearch (Node first, unsigned char label, unsigned char val) const
 
void _setBrother (TrieNode< T > *brother, unsigned char brotherLabel)
 set brother (used by sort) More...
 
TrieNodeoperator= (const TrieNode &e)=delete
 avoid affectation operator More...
 
 TrieNode (const TrieNode &e)=delete
 avoid copy constructor More...
 

Private Attributes

TrieNode< T > * _brother
 pointer to brother (node with same father as this one) More...
 
unsigned char _brotherLabel
 character to go to brother (node with same father as this one) More...
 
TrieNode< T > * _firstSubNode
 pointer to first sub node More...
 
unsigned char _firstSubNodeLabel
 character to go to first subnode More...
 
T _value
 value associed to this node More...
 

Detailed Description

template<typename T>
class edm::TrieNode< T >

this class represent the node of a trie, it contains a link to a sub node and a link to a brother (node which have the same father)

Definition at line 32 of file Trie.h.

Member Typedef Documentation

template<typename T>
typedef TrieNodeIter<T> edm::TrieNode< T >::const_iterator

Definition at line 76 of file Trie.h.

Constructor & Destructor Documentation

template<typename T >
edm::TrieNode< T >::TrieNode ( )

we can not set _value here because type is unknown. assert that the value is set later with setValue()

Definition at line 327 of file Trie.h.

328  : _brother(0),
329  _brotherLabel(0),
330  _firstSubNode(0),
332  _value()
335 {}
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:148
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:146
T _value
value associed to this node
Definition: Trie.h:150
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:144
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:142
template<typename T >
edm::TrieNode< T >::~TrieNode ( )

Definition at line 338 of file Trie.h.

338  {
339  // do not delete _brother and _firstSubNode because they are
340  // allocated by factory (TrieFactory) and factory will delete them
341 }
template<typename T>
edm::TrieNode< T >::TrieNode ( const TrieNode< T > &  e)
privatedelete

avoid copy constructor

Member Function Documentation

template<typename T >
void edm::TrieNode< T >::_addBrother ( unsigned char  chr,
TrieNode< T > *  brother 
)
private

add a new brother

Definition at line 384 of file Trie.h.

References edm::TrieNode< T >::_brother, edm::TrieNode< T >::_brotherLabel, edm::TrieNode< T >::_setBrother(), and edm::TrieNode< T >::brother().

384  {
385  if (!_brother || _brotherLabel > chr) {
386  brother->_setBrother(_brother, _brotherLabel);
387  _brother = brother;
388  _brotherLabel = chr;
389  } else
390  _brother->_addBrother(chr, brother);
391 }
const TrieNode< T > * brother() const
get brother (return 0x0 this node has no brother)
Definition: Trie.h:363
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:144
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:142
template<typename T >
const edm::TrieNode< T > * edm::TrieNode< T >::_getBrother ( unsigned char  chr) const
private

@ brief get brother that has the label chr (return 0x0 if brother is not found)

Definition at line 373 of file Trie.h.

References edm::TrieNode< T >::_brother, edm::TrieNode< T >::_brotherLabel, edm::TrieNode< T >::_sequentialSearch(), and edm::TrieNode< T >::brother().

373  {
374  const TrieNode<T> *brother = _brother;
375  return _sequentialSearch(brother, _brotherLabel, chr);
376 }
const TrieNode< T > * brother() const
get brother (return 0x0 this node has no brother)
Definition: Trie.h:363
Node _sequentialSearch(Node first, unsigned char label, unsigned char val) const
Definition: Trie.h:436
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:144
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:142
template<typename T >
edm::TrieNode< T > * edm::TrieNode< T >::_getBrother ( unsigned char  chr)
private

@ brief get brother that has the label chr (return 0x0 if brother is not found)

Definition at line 379 of file Trie.h.

References edm::TrieNode< T >::_brother, edm::TrieNode< T >::_brotherLabel, and edm::TrieNode< T >::_sequentialSearch().

379  {
381 }
Node _sequentialSearch(Node first, unsigned char label, unsigned char val) const
Definition: Trie.h:436
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:144
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:142
template<typename T >
template<typename Node >
Node edm::TrieNode< T >::_sequentialSearch ( Node  first,
unsigned char  label,
unsigned char  val 
) const
inlineprivate

Definition at line 436 of file Trie.h.

References edm::first().

Referenced by edm::TrieNode< T >::_getBrother(), and edm::TrieNode< T >::subNodeByLabel().

436  {
437  if (first && label <= val) {
438  if (label == val)
439  return first;
440  return first->_getBrother(val);
441  }
442  return 0x0;
443 }
char const * label
T first(std::pair< T, U > const &p)
template<typename T >
void edm::TrieNode< T >::_setBrother ( TrieNode< T > *  brother,
unsigned char  brotherLabel 
)
private

set brother (used by sort)

Definition at line 446 of file Trie.h.

References edm::TrieNode< T >::_brother, edm::TrieNode< T >::_brotherLabel, edm::TrieNode< T >::brother(), and edm::TrieNode< T >::brotherLabel().

Referenced by edm::TrieNode< T >::_addBrother(), and edm::TrieNode< T >::addSubNode().

446  {
447  _brother = brother;
449 }
const TrieNode< T > * brother() const
get brother (return 0x0 this node has no brother)
Definition: Trie.h:363
unsigned char brotherLabel() const
get brother label
Definition: Trie.h:394
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:144
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:142
template<typename T >
void edm::TrieNode< T >::addSubNode ( unsigned char  chr,
TrieNode< T > *  node 
)

Definition at line 425 of file Trie.h.

References edm::TrieNode< T >::_firstSubNode, edm::TrieNode< T >::_firstSubNodeLabel, and edm::TrieNode< T >::_setBrother().

Referenced by edm::Trie< T >::_addEntry().

425  {
426  if (!_firstSubNode || _firstSubNodeLabel > chr) {
427  node->_setBrother(_firstSubNode, _firstSubNodeLabel);
428  _firstSubNode = node;
429  _firstSubNodeLabel = chr;
430  } else
431  _firstSubNode->_addBrother(chr, node);
432 }
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:148
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:146
template<typename T >
edm::TrieNodeIter< T > edm::TrieNode< T >::begin ( void  ) const

initialize subnode iterator (std conforming)

Definition at line 344 of file Trie.h.

344  {
345  return const_iterator(this);
346 }
TrieNodeIter< T > const_iterator
Definition: Trie.h:76
template<typename T >
const edm::TrieNode< T > * edm::TrieNode< T >::brother ( ) const

get brother (return 0x0 this node has no brother)

Definition at line 363 of file Trie.h.

References edm::TrieNode< T >::_brother.

Referenced by edm::TrieNode< T >::_addBrother(), edm::TrieNode< T >::_getBrother(), and edm::TrieNode< T >::_setBrother().

363  {
364  return _brother;
365 }
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:142
template<typename T >
edm::TrieNode< T > * edm::TrieNode< T >::brother ( )

Definition at line 368 of file Trie.h.

References edm::TrieNode< T >::_brother.

368  {
369  return _brother;
370 }
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:142
template<typename T >
unsigned char edm::TrieNode< T >::brotherLabel ( ) const

get brother label

Definition at line 394 of file Trie.h.

References edm::TrieNode< T >::_brotherLabel.

Referenced by edm::TrieNode< T >::_setBrother().

394  {
395  return _brotherLabel;
396 }
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:144
template<typename T >
void edm::TrieNode< T >::clear ( void  )
template<typename T >
void edm::TrieNode< T >::display ( std::ostream &  os,
unsigned  offset,
unsigned char  label 
) const

display content of node in output stream

Definition at line 452 of file Trie.h.

References edm::TrieNode< T >::_brother, edm::TrieNode< T >::_brotherLabel, edm::TrieNode< T >::_firstSubNode, edm::TrieNode< T >::_firstSubNodeLabel, edm::TrieNode< T >::_value, mps_fire::i, and hltrates_dqm_sourceclient-live_cfg::offset.

452  {
453  unsigned int i;
454  for (i = 0; i < offset; ++i)
455  os << " ";
456  if (label)
457  os << "label[" << label << "] ";
458  os << "value[" << _value << "]" << std::endl;
459  if (_firstSubNode)
460  _firstSubNode->display(os, offset + 2, _firstSubNodeLabel);
461  if (_brother)
462  _brother->display(os, offset, _brotherLabel);
463 }
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:148
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:146
char const * label
T _value
value associed to this node
Definition: Trie.h:150
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:144
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:142
template<typename T >
edm::TrieNodeIter< T > edm::TrieNode< T >::end ( void  ) const

mark end of iteration (std conforming)

Definition at line 348 of file Trie.h.

Referenced by Types.LuminosityBlockRange::cppID(), and Types.EventRange::cppID().

348  {
349  return const_iterator(0);
350 }
TrieNodeIter< T > const_iterator
Definition: Trie.h:76
template<typename T>
TrieNode& edm::TrieNode< T >::operator= ( const TrieNode< T > &  e)
privatedelete

avoid affectation operator

template<typename T >
void edm::TrieNode< T >::setValue ( const T val)
template<typename T >
const edm::TrieNode< T > * edm::TrieNode< T >::subNode ( ) const

Definition at line 399 of file Trie.h.

References edm::TrieNode< T >::_firstSubNode.

399  {
400  return _firstSubNode;
401 }
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:146
template<typename T >
edm::TrieNode< T > * edm::TrieNode< T >::subNode ( )

Definition at line 404 of file Trie.h.

References edm::TrieNode< T >::_firstSubNode.

404  {
405  return _firstSubNode;
406 }
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:146
template<typename T >
const edm::TrieNode< T > * edm::TrieNode< T >::subNodeByLabel ( unsigned char  chr) const

Definition at line 414 of file Trie.h.

References edm::TrieNode< T >::_firstSubNode, edm::TrieNode< T >::_firstSubNodeLabel, edm::TrieNode< T >::_sequentialSearch(), and edm::first().

Referenced by edm::Trie< T >::_addEntry(), edm::Trie< T >::find(), and edm::Trie< T >::node().

414  {
415  const TrieNode<T> *first = _firstSubNode;
416  return _sequentialSearch(first, _firstSubNodeLabel, chr);
417 }
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:148
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:146
Node _sequentialSearch(Node first, unsigned char label, unsigned char val) const
Definition: Trie.h:436
T first(std::pair< T, U > const &p)
template<typename T >
edm::TrieNode< T > * edm::TrieNode< T >::subNodeByLabel ( unsigned char  chr)

Definition at line 420 of file Trie.h.

References edm::TrieNode< T >::_firstSubNode, edm::TrieNode< T >::_firstSubNodeLabel, and edm::TrieNode< T >::_sequentialSearch().

420  {
422 }
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:148
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:146
Node _sequentialSearch(Node first, unsigned char label, unsigned char val) const
Definition: Trie.h:436
template<typename T >
unsigned char edm::TrieNode< T >::subNodeLabel ( ) const

Definition at line 409 of file Trie.h.

References edm::TrieNode< T >::_firstSubNodeLabel.

409  {
410  return _firstSubNodeLabel;
411 }
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:148
template<typename T >
const T & edm::TrieNode< T >::value ( ) const

Member Data Documentation

template<typename T>
TrieNode<T>* edm::TrieNode< T >::_brother
private
template<typename T>
unsigned char edm::TrieNode< T >::_brotherLabel
private
template<typename T>
TrieNode<T>* edm::TrieNode< T >::_firstSubNode
private
template<typename T>
unsigned char edm::TrieNode< T >::_firstSubNodeLabel
private
template<typename T>
T edm::TrieNode< T >::_value
private