NODE* trace_string( SUFFIX_TREE* tree, /* Node to start from */ NODE* node, /* String to trace */ PATH str, /* Last matching position in edge */ DBL_WORD* edge_pos, /* Last matching position in tree string */ DBL_WORD* chars_found, /* skip or not */ SKIP_TYPE type) { /* This variable will be 1 when search is done. It is a return value from function trace_single_edge */ int search_done = 0; /* This variable will hold the number of matching characters found in the current edge. It is a return value from function trace_single_edge */ DBL_WORD edge_chars_found; *chars_found = 0; while(search_done == 0) { *edge_pos = 0; edge_chars_found = 0; node = trace_single_edge(tree, node, str, edge_pos, &edge_chars_found, type, &search_done); str.begin += edge_chars_found; *chars_found += edge_chars_found; } return node; }
Node_T trace_string(SuffixTree_T tree, Node_T node, struct SuffixTreePath str, SuffixTreeIndex_T* edge_pos, SuffixTreeIndex_T* chars_found, Skip_T type) { /* This variable will be 1 when search is done. It is a return value from function trace_single_edge */ int search_done = 0; /* This variable will hold the number of matching characters found in the current edge. It is a return value from function trace_single_edge */ SuffixTreeIndex_T edge_chars_found; *chars_found = 0; while(search_done == 0) { *edge_pos = 0; edge_chars_found = 0; node = trace_single_edge(tree, node, str, edge_pos, &edge_chars_found, type, &search_done); str.begin += edge_chars_found; *chars_found += edge_chars_found; } return node; }