ccsoft  0.0.0
Convolutional codes library with soft decision decoding
ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > Class Template Reference

Represents a node and its incoming edge in the code tree This version uses a fixed array to store forward node+edges pointers. N_k template parameter gives the size of the input symbol (k parameter). There are (1<<N_k) forward node+edges. More...

#include <CC_TreeNodeEdge_FA.h>

Inheritance diagram for ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >:
Collaboration diagram for ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >:

List of all members.

Public Member Functions

 CC_TreeNodeEdge_FA (unsigned int _id, CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > *_p_incoming_node_edge, const T_IOSymbol &_in_symbol, float _incoming_edge_metric, float _path_metric, int _depth)
 ~CC_TreeNodeEdge_FA ()
void set_outgoing_node_edge (CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > *p_outgoing_node_edge, unsigned int index)
void delete_outgoing_node_edges ()
bool valid_outgoing_node_edges (unsigned int index_limit=(1<< N_k))
const std::array
< CC_TreeNodeEdge_FA
< T_IOSymbol, T_Register,
T_Tag, N_k > *,(1<< N_k)> & 
get_outgoing_node_edges () const
std::array< CC_TreeNodeEdge_FA
< T_IOSymbol, T_Register,
T_Tag, N_k > *,(1<< N_k)> & 
get_outgoing_node_edges ()
CC_TreeNodeEdge_FA< T_IOSymbol,
T_Register, T_Tag, N_k > * 
get_incoming_node_edge ()

Protected Member Functions

void clear_outgoing_edges ()

Protected Attributes

std::array< CC_TreeNodeEdge_FA
< T_IOSymbol, T_Register,
T_Tag, N_k > *,(1<< N_k)> 
p_outgoing_node_edges
 Outgoing edges+node pointers.
CC_TreeNodeEdge_FA< T_IOSymbol,
T_Register, T_Tag, N_k > * 
p_incoming_node_edge
 Pointer to the incoming edge+node.

Detailed Description

template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
class ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >

Represents a node and its incoming edge in the code tree This version uses a fixed array to store forward node+edges pointers. N_k template parameter gives the size of the input symbol (k parameter). There are (1<<N_k) forward node+edges.

Template Parameters:
T_IOSymbolType of the input and output symbols
T_RegisterType of the encoder internal registers
T_TagType of the node-edge tag
N_kInput symbol size in bits (k parameter)

Constructor & Destructor Documentation

template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::CC_TreeNodeEdge_FA ( unsigned int  _id,
CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > *  _p_incoming_node_edge,
const T_IOSymbol &  _in_symbol,
float  _incoming_edge_metric,
float  _path_metric,
int  _depth 
) [inline]

Constructor

Parameters:
_idUnique ID of the edge
_p_incoming_edgePointer to the incoming edge to the node
_in_symbolInput symbol corresponding to the edge
_metricMetric of the edge
_path_metricPath metric at the node
_depthThis node depth
                        :
                CC_TreeNodeEdge_base<T_IOSymbol, T_Tag>(_id, _in_symbol, _incoming_edge_metric, _path_metric, _depth),
                p_incoming_node_edge(_p_incoming_node_edge)
    {
        clear_outgoing_edges();
    }
template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::~CC_TreeNodeEdge_FA ( ) [inline]

Destructor

        {
                // deletes all outgoing edge+nodes
                delete_outgoing_node_edges();
        }

Member Function Documentation

template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
void ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::clear_outgoing_edges ( ) [inline, protected]
    {
        std::fill(p_outgoing_node_edges.begin(), p_outgoing_node_edges.end(), (CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>*) 0);
        //p_outgoing_node_edges.fill(0);
    }
template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
void ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::delete_outgoing_node_edges ( ) [inline]

Delete outgoing edges

    {
        typename std::array<CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>*, (1<<N_k)>::iterator ne_it = p_outgoing_node_edges.begin();

        for (; ne_it != p_outgoing_node_edges.end(); ++ne_it)
        {
            if (*ne_it)
            {
                delete *ne_it;
                *ne_it = 0;
            }
        }

        clear_outgoing_edges();
    }
template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>* ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::get_incoming_node_edge ( ) [inline]

Get pointer to the incoming edge

    {
        return p_incoming_node_edge;
    }
template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
const std::array<CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>*, (1<<N_k)>& ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::get_outgoing_node_edges ( ) const [inline]

Return a R/O reference to the outgoing node+edges

    {
        return p_outgoing_node_edges;
    }
template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
std::array<CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>*, (1<<N_k)>& ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::get_outgoing_node_edges ( ) [inline]

Return a R/W reference to the outgoing edges

    {
        return p_outgoing_node_edges;
    }
template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
void ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::set_outgoing_node_edge ( CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > *  p_outgoing_node_edge,
unsigned int  index 
) [inline]

Add an outgoing edge

Parameters:
p_outgoing_node_edgeOutgoing edge+node
    {
        p_outgoing_node_edges[index] = p_outgoing_node_edge;
    }
template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
bool ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::valid_outgoing_node_edges ( unsigned int  index_limit = (1<<N_k)) [inline]

Verifies validity of outgoing node+edges i.e. pointers are all non null

    {
        for (unsigned int i=0; i<(1<<N_k); i++)
        {
            if (i == index_limit)
            {
                break;
            }

            if (p_outgoing_node_edges[i] == 0)
            {
                return false;
            }
        }

        return true;
    }

Member Data Documentation

template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>* ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::p_incoming_node_edge [protected]

Pointer to the incoming edge+node.

template<typename T_IOSymbol, typename T_Register, typename T_Tag, unsigned int N_k>
std::array<CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>*, (1<<N_k)> ccsoft::CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k >::p_outgoing_node_edges [protected]

Outgoing edges+node pointers.


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