Source File modules/rx/rx_print.c

    1    | /***************************************
    2    |   $Revision: 1.13 $
    3    |
    4    |   Radix tree (rx).  rx_print.c - functions to print a forest/tree/node
    5    |                                  (mainly for debugging purposes)
    6    |
    7    |   Status: NOT REVUED, TESTED, INCOMPLETE
    8    |
    9    |   Design and implementation by: Marek Bukowy
    10   |
    11   |   ******************/ /******************
    12   |   Copyright (c) 1999                              RIPE NCC
    13   |
    14   |   All Rights Reserved
    15   |
    16   |   Permission to use, copy, modify, and distribute this software and its
    17   |   documentation for any purpose and without fee is hereby granted,
    18   |   provided that the above copyright notice appear in all copies and that
    19   |   both that copyright notice and this permission notice appear in
    20   |   supporting documentation, and that the name of the author not be
    21   |   used in advertising or publicity pertaining to distribution of the
    22   |   software without specific, written prior permission.
    23   |
    24   |   THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
    25   |   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
    26   |   AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
    27   |   DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
    28   |   AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    29   |   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    30   |   ***************************************/
    31   |
    32   | #define RX_IMPL
    33   | #define RX_IMPL_PRINT
    34   | #include <rxroutines.h>
    35   | #include "sk.h"
    36   |
    37   | const char *
    38   | RX_text_srch_mode(rx_srch_mt mode)
    39   | {
    40   |   return rx_srch_mode_text[mode];
    41   | }
    42   |
    43   | er_ret_t
    44   | rx_walk_hook_printnode(rx_node_t *node, int level, int nodecounter, void *con)
    45   | {
    46   |   sk_conn_st *condat = (sk_conn_st *) con;
    47   |   char line[200]="", buf[1024];
    48   |
    49   |   int i;
    50   |
    51   |   /* indent*/
    52   |   for(i=0;i<level;i++) strcat(line,"  ");
    53   |
    54   |   sprintf( line+strlen(line) ,"** level %d ** ", level);
    55   |   /* @ %p; parent %p, child[0]=%p, child[1]=%p\n", */
    56   |   /*  node, node->parent_ptr, node->child_ptr[0], node->child_ptr[1] );*/
    57   |
    58   |   rx_nod_print(node, buf, 1024);
    59   |
    60   |   SK_cd_puts(condat, line);
    61   |   SK_cd_puts(condat, buf);
    62   |   SK_cd_puts(condat, "\n");
    63   |   return RX_OK;
    64   | }
    65   |
    66   | /***************************************************************************/
    67   |
    68   | er_ret_t
    69   | rx_tree_print( sk_conn_st *condat, rx_tree_t *tree )
    70   | {
    71   | int cnt;
    72   | er_ret_t err;
    73   | char line[200]="";
    74   |
    75   |  if( tree->top_ptr != NULL ) {
    76   |    cnt = rx_walk_tree(tree->top_ptr, rx_walk_hook_printnode,
    77   | 		      RX_WALK_CNTGLU,  /* print also glue nodes*/
    78   | 		      255, 0, 0, condat, &err);
    79   |    sprintf(line,"Traversed %d nodes\n", cnt);
    80   |    SK_cd_puts(condat,line);
    81   |  }
    82   |  else {
    83   |    SK_cd_puts(condat,"The tree is empty!\n");
    84   |  }
    85   |
    86   |  return err;
    87   | }
    88   |
    89   |
    90   | /***************************************************************************/
    91   |
    92   | void
    93   | rx_space_printone(void *voptr, void *condat)
    94   | {
    95   |   rx_tree_t *ptr = voptr;
    96   |   char aout[1024];
    97   |   char prstr[IP_PREFSTR_MAX];
    98   |
    99   |   *aout=0;
    100  |
    101  |   sprintf(aout+strlen(aout), "%50s:%d\n", "space",    ptr->space );
    102  |   sprintf(aout+strlen(aout), "%50s:%d\n", "family",   ptr->family );
    103  |   sprintf(aout+strlen(aout), "%50s:%d\n", "subtrees", ptr->subtrees);
    104  |   sprintf(aout+strlen(aout), "%50s:%d\n", "mem_mode", ptr->mem_mode);
    105  |   sprintf(aout+strlen(aout), "%50s:%d\n", "num_nodes",ptr->num_nodes);
    106  |   sprintf(aout+strlen(aout), "%50s:%08x\n", "top_ptr", (int) ptr->top_ptr);
    107  |   sprintf(aout+strlen(aout), "%50s:%d\n", "maxbits",  ptr->maxbits);
    108  |
    109  |   if( IP_pref_b2a(  &(ptr->prefix), prstr, IP_PREFSTR_MAX) != IP_OK )
    110  |     die; /* program error.*/
    111  |
    112  |   sprintf(aout+strlen(aout), "%50s:%s\n", "prefix", prstr);
    113  |   SK_cd_puts( (sk_conn_st *)condat,aout);
    114  | }
    115  |
    116  |
    117  |
    118  | /***************************************************************************/
    119  |
    120  | void
    121  | rx_nod_print( rx_node_t *node, char *buf, unsigned maxchar )
    122  | {
    123  |   char pref[IP_PREFSTR_MAX];
    124  |
    125  |   if( IP_pref_b2a(  &(node->prefix), pref, IP_PREFSTR_MAX) != IP_OK ) {
    126  |     die;
    127  |   }
    128  |
    129  |   snprintf(buf, maxchar, "%s%s",
    130  | 	   ( node->glue ) ? "++glue++" : "", pref);
    131  | }
    132  | /***************************************************************************/
    133  |
    134  | void
    135  | rx_stk_print( rx_nodcpy_t   stack[],         /* stack==array of node_copies*/
    136  | 	      int           stackdepth )
    137  | {
    138  |   int i;
    139  |   rx_node_t *node;
    140  |   char buf[1024];
    141  |
    142  |   ER_dbg_va(FAC_RX, ASP_RX_STKBLD_DET,
    143  | 	    "stack dump: %d elements", stackdepth);
    144  |
    145  |   for(i = 0; i < stackdepth; i++) {
    146  |     node = & stack[i].cpy;
    147  |
    148  |     rx_nod_print(node, buf, 1024);
    149  |
    150  |     ER_dbg_va(FAC_RX, ASP_RX_STKBLD_DET, "position %d: %s", i, buf);
    151  |   }
    152  | }