CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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)
 avoid affectation operator More...
 
 TrieNode (const TrieNode &e)
 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 34 of file Trie.h.

Member Typedef Documentation

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

Definition at line 84 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 366 of file Trie.h.

366  :
370 {
371 }
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:158
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:156
T _value
value associed to this node
Definition: Trie.h:160
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:154
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:152
template<typename T >
edm::TrieNode< T >::~TrieNode ( )

Definition at line 374 of file Trie.h.

375 {
376  // do not delete _brother and _firstSubNode because they are
377  // allocated by factory (TrieFactory) and factory will delete them
378 }
template<typename T>
edm::TrieNode< T >::TrieNode ( const TrieNode< T > &  e)
private

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 430 of file Trie.h.

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

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

431 {
432  if (!_brother || _brotherLabel > chr)
433  {
434  brother->_setBrother(_brother, _brotherLabel);
435  _brother = brother;
436  _brotherLabel = chr;
437  }
438  else
439  _brother->_addBrother(chr, brother);
440 }
const TrieNode< T > * brother() const
get brother (return 0x0 this node has no brother)
Definition: Trie.h:405
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:154
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:152
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 417 of file Trie.h.

418 {
419  const TrieNode<T> *brother = _brother;
420  return _sequentialSearch(brother, _brotherLabel, chr);
421 }
const TrieNode< T > * brother() const
get brother (return 0x0 this node has no brother)
Definition: Trie.h:405
Node _sequentialSearch(Node first, unsigned char label, unsigned char val) const
Definition: Trie.h:494
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:154
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:152
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 424 of file Trie.h.

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

Definition at line 494 of file Trie.h.

References edm::first().

495 {
496  if (first && label <= val)
497  {
498  if (label == val)
499  return first;
500  return first->_getBrother(val);
501  }
502  return 0x0;
503 }
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 506 of file Trie.h.

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

507 {
508  _brother = brother;
510 }
const TrieNode< T > * brother() const
get brother (return 0x0 this node has no brother)
Definition: Trie.h:405
unsigned char brotherLabel() const
get brother label
Definition: Trie.h:443
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:154
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:152
template<typename T >
void edm::TrieNode< T >::addSubNode ( unsigned char  chr,
TrieNode< T > *  node 
)

Definition at line 480 of file Trie.h.

References edm::TrieNode< T >::_setBrother(), and python.Node::node.

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

481 {
482  if (!_firstSubNode || _firstSubNodeLabel > chr)
483  {
484  node->_setBrother(_firstSubNode, _firstSubNodeLabel);
486  _firstSubNodeLabel = chr;
487  }
488  else
489  _firstSubNode->_addBrother(chr, node);
490 }
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:158
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:156
tuple node
Definition: Node.py:50
template<typename T >
edm::TrieNodeIter< T > edm::TrieNode< T >::begin ( void  ) const

initialize subnode iterator (std conforming)

Definition at line 383 of file Trie.h.

383  {
384  return const_iterator(this);
385 }
TrieNodeIter< T > const_iterator
Definition: Trie.h:84
template<typename T >
const edm::TrieNode< T > * edm::TrieNode< T >::brother ( ) const

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

Definition at line 405 of file Trie.h.

Referenced by edm::TrieNodeIter< T >::increment().

406 {
407  return _brother;
408 }
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:152
template<typename T >
edm::TrieNode< T > * edm::TrieNode< T >::brother ( )

Definition at line 411 of file Trie.h.

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

get brother label

Definition at line 443 of file Trie.h.

Referenced by edm::TrieNodeIter< T >::increment().

444 {
445  return _brotherLabel;
446 }
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:154
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 513 of file Trie.h.

References i, and evf::evtn::offset().

514 {
515  unsigned int i;
516  for (i = 0; i < offset; ++i)
517  os << " ";
518  if (label)
519  os << "label[" << label << "] ";
520  os << "value[" << _value << "]" << std::endl;
521  if (_firstSubNode)
522  _firstSubNode->display(os, offset + 2, _firstSubNodeLabel);
523  if (_brother)
524  _brother->display(os, offset, _brotherLabel);
525 }
int i
Definition: DBlmapReader.cc:9
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:158
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:156
unsigned int offset(bool)
T _value
value associed to this node
Definition: Trie.h:160
unsigned char _brotherLabel
character to go to brother (node with same father as this one)
Definition: Trie.h:154
TrieNode< T > * _brother
pointer to brother (node with same father as this one)
Definition: Trie.h:152
template<typename T >
edm::TrieNodeIter< T > edm::TrieNode< T >::end ( void  ) const

mark end of iteration (std conforming)

Definition at line 388 of file Trie.h.

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

388  {
389  return const_iterator(0);
390 }
TrieNodeIter< T > const_iterator
Definition: Trie.h:84
template<typename T>
TrieNode& edm::TrieNode< T >::operator= ( const TrieNode< T > &  e)
private

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 449 of file Trie.h.

450 {
451  return _firstSubNode;
452 }
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:156
template<typename T >
edm::TrieNode< T > * edm::TrieNode< T >::subNode ( )

Definition at line 455 of file Trie.h.

456 {
457  return _firstSubNode;
458 }
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:156
template<typename T >
const edm::TrieNode< T > * edm::TrieNode< T >::subNodeByLabel ( unsigned char  chr) const

Definition at line 467 of file Trie.h.

References edm::first().

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

468 {
469  const TrieNode<T> *first = _firstSubNode;
470  return _sequentialSearch(first, _firstSubNodeLabel, chr);
471 }
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:158
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:156
Node _sequentialSearch(Node first, unsigned char label, unsigned char val) const
Definition: Trie.h:494
T first(std::pair< T, U > const &p)
template<typename T >
edm::TrieNode< T > * edm::TrieNode< T >::subNodeByLabel ( unsigned char  chr)

Definition at line 474 of file Trie.h.

475 {
477 }
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:158
TrieNode< T > * _firstSubNode
pointer to first sub node
Definition: Trie.h:156
Node _sequentialSearch(Node first, unsigned char label, unsigned char val) const
Definition: Trie.h:494
template<typename T >
unsigned char edm::TrieNode< T >::subNodeLabel ( ) const

Definition at line 461 of file Trie.h.

462 {
463  return _firstSubNodeLabel;
464 }
unsigned char _firstSubNodeLabel
character to go to first subnode
Definition: Trie.h:158
template<typename T >
const T & edm::TrieNode< T >::value ( ) const

Member Data Documentation

template<typename T>
TrieNode<T>* edm::TrieNode< T >::_brother
private

pointer to brother (node with same father as this one)

Definition at line 152 of file Trie.h.

template<typename T>
unsigned char edm::TrieNode< T >::_brotherLabel
private

character to go to brother (node with same father as this one)

Definition at line 154 of file Trie.h.

template<typename T>
TrieNode<T>* edm::TrieNode< T >::_firstSubNode
private

pointer to first sub node

Definition at line 156 of file Trie.h.

template<typename T>
unsigned char edm::TrieNode< T >::_firstSubNodeLabel
private

character to go to first subnode

Definition at line 158 of file Trie.h.

template<typename T>
T edm::TrieNode< T >::_value
private