![]() |
ccsoft
0.0.0
Convolutional codes library with soft decision decoding
|
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>
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. |
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.
T_IOSymbol | Type of the input and output symbols |
T_Register | Type of the encoder internal registers |
T_Tag | Type of the node-edge tag |
N_k | Input symbol size in bits (k parameter) |
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
_id | Unique ID of the edge |
_p_incoming_edge | Pointer to the incoming edge to the node |
_in_symbol | Input symbol corresponding to the edge |
_metric | Metric of the edge |
_path_metric | Path metric at the node |
_depth | This 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(); }
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(); }
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); }
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(); }
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; }
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; }
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; }
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
p_outgoing_node_edge | Outgoing edge+node |
{ p_outgoing_node_edges[index] = p_outgoing_node_edge; }
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; }
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.
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.