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

#include <CC_TreeGraphviz_FA.h>

List of all members.

Static Public Member Functions

static void create_dot (CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > *root_node, std::ostream &os)

Static Protected Member Functions

static void explore_node_edge (CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > *node_edge, std::vector< CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > * > &node_edges)
static void print_dot (std::vector< CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > * > &node_edges, std::ostream &os)

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


Member Function Documentation

template<typename T_IOSymbol , typename T_Register , typename T_Tag , unsigned int N_k>
static void ccsoft::CC_TreeGraphviz_FA< T_IOSymbol, T_Register, T_Tag, N_k >::create_dot ( CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > *  root_node,
std::ostream &  os 
) [inline, static]

Create a dot command sequence into an output stream

Parameters:
root_nodeRoot node of the coding tree
osOutput stream
        {
            std::vector<CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>*> node_edges;
            
            explore_node_edge(root_node, node_edges);
            print_dot(node_edges, os);
        }

Here is the call graph for this function:

template<typename T_IOSymbol , typename T_Register , typename T_Tag , unsigned int N_k>
static void ccsoft::CC_TreeGraphviz_FA< T_IOSymbol, T_Register, T_Tag, N_k >::explore_node_edge ( CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > *  node_edge,
std::vector< CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > * > &  node_edges 
) [inline, static, protected]

Explore a node+edge in the tree to accumulate node+edges information

Parameters:
nodeNode to explore
nodesVector of all nodes
edgesVector of all edges
        {
            node_edges.push_back(node_edge);
            const std::array<CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>*, (1<<N_k)>& outgoing_node_edges = node_edge->get_outgoing_node_edges();
            typename std::array<CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>*, (1<<N_k)>::const_iterator ne_it = outgoing_node_edges.begin();
            
            for (; ne_it != outgoing_node_edges.end(); ++ne_it)
            {
                node_edges.push_back(*ne_it);
                explore_node_edge(*ne_it, node_edges);
            }
        }

Here is the call graph for this function:

template<typename T_IOSymbol , typename T_Register , typename T_Tag , unsigned int N_k>
static void ccsoft::CC_TreeGraphviz_FA< T_IOSymbol, T_Register, T_Tag, N_k >::print_dot ( std::vector< CC_TreeNodeEdge_FA< T_IOSymbol, T_Register, T_Tag, N_k > * > &  node_edges,
std::ostream &  os 
) [inline, static, protected]

Print the dot output

Parameters:
nodesVector of all nodes
edgesVector of all edges
osOutput stream
        {
            os << "digraph G {" << std::endl;
            os << "    rankdir=LR" << std::endl << std::endl;
            
            typename std::vector<CC_TreeNodeEdge_FA<T_IOSymbol, T_Register, T_Tag, N_k>*>::const_iterator ne_it = node_edges.begin();
            
            for (; ne_it != node_edges.end(); ++ne_it)
            {
                os << "    n_" << (*ne_it)->get_id() << " [shape=" << ((*ne_it)->get_id() == 0 ? "box" : "ellipse") << ", label=\"";
                os << (*ne_it)->get_id() << " " << (*ne_it)->get_path_metric() << "\"";
                
                if ((*ne_it)->is_on_final_path())
                {
                    os << " style=filled fillcolor=lightblue";
                }
                os  << "]" << std::endl;
            }
            
            ne_it = node_edges.begin();

            for (; ne_it != node_edges.end(); ++ne_it)
            {
                os << "    n_" << (*ne_it)->get_incoming_node_edge()->get_id() << " -> n_" << (*ne_it)->get_id() << " [label=\"";
                print_symbol((*ne_it)->get_in_symbol(), os);
                os << " " << (*ne_it)->get_incoming_metric() << "\"]" << std::endl;
            }

            os << "}" << std::endl;
        }

Here is the call graph for this function:


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