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

#include <CC_TreeGraphviz.h>

List of all members.

Static Public Member Functions

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

Static Protected Member Functions

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

template<typename T_IOSymbol, typename T_Register, typename T_Tag>
class ccsoft::CC_TreeGraphviz< T_IOSymbol, T_Register, T_Tag >


Member Function Documentation

template<typename T_IOSymbol , typename T_Register , typename T_Tag >
static void ccsoft::CC_TreeGraphviz< T_IOSymbol, T_Register, T_Tag >::create_dot ( CC_TreeNodeEdge< T_IOSymbol, T_Register, T_Tag > *  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<T_IOSymbol, T_Register, T_Tag>*> 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 >
static void ccsoft::CC_TreeGraphviz< T_IOSymbol, T_Register, T_Tag >::explore_node_edge ( CC_TreeNodeEdge< T_IOSymbol, T_Register, T_Tag > *  node_edge,
std::vector< CC_TreeNodeEdge< T_IOSymbol, T_Register, T_Tag > * > &  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::vector<CC_TreeNodeEdge<T_IOSymbol, T_Register, T_Tag>*>& outgoing_node_edges = node_edge->get_outgoing_node_edges();
            typename std::vector<CC_TreeNodeEdge<T_IOSymbol, T_Register, T_Tag>*>::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 >
static void ccsoft::CC_TreeGraphviz< T_IOSymbol, T_Register, T_Tag >::print_dot ( std::vector< CC_TreeNodeEdge< T_IOSymbol, T_Register, T_Tag > * > &  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<T_IOSymbol, T_Register, T_Tag>*>::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