ccsoft  0.0.0
Convolutional codes library with soft decision decoding
ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag > Class Template Reference

A node in the code tree. More...

#include <CC_TreeNode.h>

List of all members.

Public Member Functions

 CC_TreeNode (unsigned int _id, CC_TreeEdge< T_IOSymbol, T_Register, T_EdgeTag > *_p_incoming_edge, float _path_metric, int _depth)
 ~CC_TreeNode ()
void add_outgoing_edge (CC_TreeEdge< T_IOSymbol, T_Register, T_EdgeTag > *p_outgoing_edge)
void delete_outgoing_edges ()
const std::vector< CC_TreeEdge
< T_IOSymbol, T_Register,
T_EdgeTag > * > & 
get_outgoing_edges () const
std::vector< CC_TreeEdge
< T_IOSymbol, T_Register,
T_EdgeTag > * > & 
get_outgoing_edges ()
CC_TreeEdge< T_IOSymbol,
T_Register, T_EdgeTag > * 
get_incoming_edge ()
float get_path_metric () const
int get_depth () const
unsigned int get_id () const
bool operator< (const CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag > &other) const
bool operator> (const CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag > &other) const
const std::vector< T_Register > & get_registers () const
void set_registers (const std::vector< T_Register > &_registers)
void set_on_final_path (bool _on_final_path=true)
bool is_on_final_path ()
bool operator< (const CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag > &other)
bool operator> (const CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag > &other)

Protected Attributes

unsigned int id
 Node's unique ID.
std::vector< CC_TreeEdge
< T_IOSymbol, T_Register,
T_EdgeTag > * > 
p_outgoing_edges
 Outgoing edges pointers.
CC_TreeEdge< T_IOSymbol,
T_Register, T_EdgeTag > * 
p_incoming_edge
 Pointer to the incoming edge.
float path_metric
 Path metric to the node.
int depth
 Depth of node in the tree: 0 = root.
std::vector< T_Register > registers
 state of encoder registers at node
bool on_final_path
 Marks node when backtracking the solution.

Detailed Description

template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
class ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >

A node in the code tree.

Template Parameters:
T_IOSymbolType of the input and output symbols
T_RegisterType of the encoder internal registers

Constructor & Destructor Documentation

template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::CC_TreeNode ( unsigned int  _id,
CC_TreeEdge< T_IOSymbol, T_Register, T_EdgeTag > *  _p_incoming_edge,
float  _path_metric,
int  _depth 
) [inline]

Constructor

Parameters:
_idUnique ID of the edge
_p_incoming_edgePointer to the incoming edge to the node
_path_metricPath metric at the node
_depthThis node depth
                        :
                id(_id),
                p_incoming_edge(_p_incoming_edge),
                path_metric(_path_metric),
                depth(_depth),
                on_final_path(false)
    {}
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::~CC_TreeNode ( ) [inline]

Destructor. Destroys all outgoing edges

Here is the call graph for this function:


Member Function Documentation

template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
void ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::add_outgoing_edge ( CC_TreeEdge< T_IOSymbol, T_Register, T_EdgeTag > *  p_outgoing_edge) [inline]

Add an outgoing edge

    {
        p_outgoing_edges.push_back(p_outgoing_edge);
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
void ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::delete_outgoing_edges ( ) [inline]

Delete outgoing edges

    {
        typename std::vector<CC_TreeEdge<T_IOSymbol, T_Register, T_EdgeTag>*>::iterator e_it = p_outgoing_edges.begin();
    
        for (; e_it != p_outgoing_edges.end(); ++e_it)
        {
            if (*e_it)
            {
                delete *e_it;
                *e_it = 0;
            }
        }

        p_outgoing_edges.clear();
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
int ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::get_depth ( ) const [inline]

Get the depth of the node

    {
        return depth;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
unsigned int ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::get_id ( ) const [inline]

Get node id

    {
        return id;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
CC_TreeEdge<T_IOSymbol, T_Register, T_EdgeTag>* ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::get_incoming_edge ( ) [inline]

Get pointer to the incoming edge

    {
        return p_incoming_edge;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
const std::vector<CC_TreeEdge<T_IOSymbol, T_Register, T_EdgeTag>*>& ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::get_outgoing_edges ( ) const [inline]

Return a R/O reference to the outgoing edges

    {
        return p_outgoing_edges;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
std::vector<CC_TreeEdge<T_IOSymbol, T_Register, T_EdgeTag>*>& ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::get_outgoing_edges ( ) [inline]

Return a R/W reference to the outgoing edges

    {
        return p_outgoing_edges;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
float ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::get_path_metric ( ) const [inline]

Get path metric to the node

    {
        return path_metric;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
const std::vector<T_Register>& ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::get_registers ( ) const [inline]

Get saved encoder registers reference

    {
        return registers;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
bool ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::is_on_final_path ( ) [inline]

Test the "on final path" marker

    {
        return on_final_path;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
bool ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::operator< ( const CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag > &  other) const [inline]

For ordering by increasing path metric

    {
        return path_metric < other.path_metric;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
bool ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::operator< ( const CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag > &  other) [inline]

Ordering - lesser

    {
        if (path_metric == other.path_metric)
        {
            return id < other.id;
        }
        else
        {
            return path_metric < other.path_metric;
        }
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
bool ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::operator> ( const CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag > &  other) const [inline]

For ordering by decreasing path metric

    {
        return path_metric > other.path_metric;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
bool ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::operator> ( const CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag > &  other) [inline]

Ordering - greater

    {
        if (path_metric == other.path_metric)
        {
            return id > other.id;
        }
        else
        {
            return path_metric > other.path_metric;
        }
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
void ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::set_on_final_path ( bool  _on_final_path = true) [inline]

Set the "on final path" marker

    {
        on_final_path = _on_final_path;
    }
template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
void ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::set_registers ( const std::vector< T_Register > &  _registers) [inline]

Save encoder registers

    {
        registers = _registers;
    }

Member Data Documentation

template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
int ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::depth [protected]

Depth of node in the tree: 0 = root.

template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
unsigned int ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::id [protected]

Node's unique ID.

template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
bool ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::on_final_path [protected]

Marks node when backtracking the solution.

template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
CC_TreeEdge<T_IOSymbol, T_Register, T_EdgeTag>* ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::p_incoming_edge [protected]

Pointer to the incoming edge.

template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
std::vector<CC_TreeEdge<T_IOSymbol, T_Register, T_EdgeTag>*> ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::p_outgoing_edges [protected]

Outgoing edges pointers.

template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
float ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::path_metric [protected]

Path metric to the node.

template<typename T_IOSymbol, typename T_Register, typename T_EdgeTag>
std::vector<T_Register> ccsoft::CC_TreeNode< T_IOSymbol, T_Register, T_EdgeTag >::registers [protected]

state of encoder registers at node


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines