Commit 0b439449 authored by jkvis's avatar jkvis

Added childtab up down and next queries

parent 8605638d
......@@ -61,6 +61,29 @@ static void GESA_STACK_pop(GESA_STACK* const stack)
#undef GESA_STACK_SIZE
static int GESA_is_next(GESA const* const gesa,
GESA_index_t const* const childtab,
size_t const index)
{
return gesa->lcp[childtab[index]] == gesa->lcp[index];
} // GESA_is_next
static int GESA_is_down(GESA const* const gesa,
GESA_index_t const* const childtab,
size_t const index)
{
return gesa->lcp[childtab[index]] > gesa->lcp[index];
} // GESA_is_down
static int GESA_is_up(GESA const* const gesa,
size_t const index)
{
return gesa->lcp[index] > gesa->lcp[index + 1];
} // GESA_is_up
void GESA_calculate_childtab(GESA const* const gesa,
GESA_index_t* const childtab)
{
......@@ -79,12 +102,14 @@ void GESA_calculate_childtab(GESA const* const gesa,
if (gesa->lcp[i] <= gesa->lcp[GESA_STACK_top(&stack)] &&
gesa->lcp[GESA_STACK_top(&stack)] != gesa->lcp[last_index])
{
// down
childtab[GESA_STACK_top(&stack)] = last_index;
} // if
} // while
if (last_index != -1)
{
// up
childtab[i - 1] = last_index;
last_index = -1;
} // if
......@@ -104,6 +129,7 @@ void GESA_calculate_childtab(GESA const* const gesa,
if (gesa->lcp[i] == gesa->lcp[GESA_STACK_top(&stack)])
{
// next
childtab[GESA_STACK_top(&stack)] = i;
GESA_STACK_pop(&stack);
} // if
......@@ -134,7 +160,10 @@ int main(int argc, char* argv[])
for (size_t i = 0; i < length - 1; ++i)
{
printf("%5ld %5d\n", i, childtab[i]);
printf("%5ld %5d %s\n", i, childtab[i],
GESA_is_down(&gesa, childtab, i) ? "down" :
GESA_is_up(&gesa, i) ? "up" :
GESA_is_next(&gesa, childtab, i) ? "next" : "???");
} // for
free(childtab);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment