Back to index

tetex-bin  3.0
Functions
tries.c File Reference
#include <curses.priv.h>

Go to the source code of this file.

Functions

 _nc_expand_try (struct tries *tree, unsigned short code, int *count, size_t len)
 _nc_remove_key (struct tries **tree, unsigned short code)
 _nc_remove_string (struct tries **tree, const char *string)

Function Documentation

_nc_expand_try ( struct tries tree,
unsigned short  code,
int count,
size_t  len 
)

Definition at line 49 of file tries.c.

{
    struct tries *ptr = tree;
    char *result = 0;

    if (code != 0) {
       while (ptr != 0) {
           if ((result = _nc_expand_try(ptr->child, code, count, len + 1))
              != 0) {
              break;
           }
           if (ptr->value == code) {
              *count -= 1;
              if (*count == -1) {
                  result = typeCalloc(char, len + 2);
                  break;
              }
           }
           ptr = ptr->sibling;
       }
    }
    if (result != 0) {
       if ((result[len] = ptr->ch) == 0)
           *((unsigned char *) (result + len)) = 128;
#ifdef TRACE
       if (len == 0)
           _tracef("expand_key %s %s", _tracechar(code), _nc_visbuf(result));
#endif
    }
    return result;
}

Here is the call graph for this function:

Here is the caller graph for this function:

_nc_remove_key ( struct tries **  tree,
unsigned short  code 
)

Definition at line 86 of file tries.c.

{
    T((T_CALLED("_nc_remove_key(%p,%d)"), tree, code));

    if (code == 0)
       returnCode(FALSE);

    while (*tree != 0) {
       if (_nc_remove_key(&(*tree)->child, code)) {
           returnCode(TRUE);
       }
       if ((*tree)->value == code) {
           if ((*tree)->child) {
              /* don't cut the whole sub-tree */
              (*tree)->value = 0;
           } else {
              struct tries *to_free = *tree;
              *tree = (*tree)->sibling;
              free(to_free);
           }
           returnCode(TRUE);
       }
       tree = &(*tree)->sibling;
    }
    returnCode(FALSE);
}

Here is the call graph for this function:

Here is the caller graph for this function:

_nc_remove_string ( struct tries **  tree,
const char *  string 
)

Definition at line 118 of file tries.c.

{
    T((T_CALLED("_nc_remove_string(%p,%s)"), tree, _nc_visbuf(string)));

    if (string == 0 || *string == 0)
       returnCode(FALSE);

    while (*tree != 0) {
       if (UChar((*tree)->ch) == UChar(*string)) {
           if (string[1] != 0)
              returnCode(_nc_remove_string(&(*tree)->child, string + 1));
           if ((*tree)->child == 0) {
              struct tries *to_free = *tree;
              *tree = (*tree)->sibling;
              free(to_free);
              returnCode(TRUE);
           } else {
              returnCode(FALSE);
           }
       }
       tree = &(*tree)->sibling;
    }
    returnCode(FALSE);
}

Here is the call graph for this function:

Here is the caller graph for this function: