Header And Logo

PostgreSQL
| The world's most advanced open source database.

Functions

regexport.c File Reference

#include "regex/regguts.h"
#include "regex/regexport.h"
Include dependency graph for regexport.c:

Go to the source code of this file.

Functions

static void scancolormap (struct colormap *cm, int co, union tree *t, int level, chr partial, pg_wchar **chars, int *chars_len)
int pg_reg_getnumstates (const regex_t *regex)
int pg_reg_getinitialstate (const regex_t *regex)
int pg_reg_getfinalstate (const regex_t *regex)
int pg_reg_getnumoutarcs (const regex_t *regex, int st)
void pg_reg_getoutarcs (const regex_t *regex, int st, regex_arc_t *arcs, int arcs_len)
int pg_reg_getnumcolors (const regex_t *regex)
int pg_reg_colorisbegin (const regex_t *regex, int co)
int pg_reg_colorisend (const regex_t *regex, int co)
int pg_reg_getnumcharacters (const regex_t *regex, int co)
void pg_reg_getcharacters (const regex_t *regex, int co, pg_wchar *chars, int chars_len)

Function Documentation

int pg_reg_colorisbegin ( const regex_t regex,
int  co 
)

Definition at line 155 of file regexport.c.

References assert, cnfa::bos, NULL, regex_t::re_guts, regex_t::re_magic, and REMAGIC.

Referenced by addKey().

{
    struct cnfa *cnfa;

    assert(regex != NULL && regex->re_magic == REMAGIC);
    cnfa = &((struct guts *) regex->re_guts)->search;

    if (co == cnfa->bos[0] || co == cnfa->bos[1])
        return true;
    else
        return false;
}

int pg_reg_colorisend ( const regex_t regex,
int  co 
)

Definition at line 172 of file regexport.c.

References assert, cnfa::eos, NULL, regex_t::re_guts, regex_t::re_magic, and REMAGIC.

Referenced by addKey().

{
    struct cnfa *cnfa;

    assert(regex != NULL && regex->re_magic == REMAGIC);
    cnfa = &((struct guts *) regex->re_guts)->search;

    if (co == cnfa->eos[0] || co == cnfa->eos[1])
        return true;
    else
        return false;
}

void pg_reg_getcharacters ( const regex_t regex,
int  co,
pg_wchar chars,
int  chars_len 
)

Definition at line 221 of file regexport.c.

References assert, colormap::cd, colordesc::flags, colormap::max, NULL, PSEUDO, regex_t::re_guts, regex_t::re_magic, REMAGIC, scancolormap(), and colormap::tree.

Referenced by getColorInfo().

{
    struct colormap *cm;

    assert(regex != NULL && regex->re_magic == REMAGIC);
    cm = &((struct guts *) regex->re_guts)->cmap;

    if (co <= 0 || co > cm->max || chars_len <= 0)
        return;
    if (cm->cd[co].flags & PSEUDO)
        return;

    /* Recursively search the colormap tree */
    scancolormap(cm, co, cm->tree, 0, 0, &chars, &chars_len);
}

int pg_reg_getfinalstate ( const regex_t regex  ) 

Definition at line 68 of file regexport.c.

References assert, NULL, cnfa::post, regex_t::re_guts, regex_t::re_magic, and REMAGIC.

Referenced by addKey().

{
    struct cnfa *cnfa;

    assert(regex != NULL && regex->re_magic == REMAGIC);
    cnfa = &((struct guts *) regex->re_guts)->search;

    return cnfa->post;
}

int pg_reg_getinitialstate ( const regex_t regex  ) 

Definition at line 54 of file regexport.c.

References assert, NULL, cnfa::pre, regex_t::re_guts, regex_t::re_magic, and REMAGIC.

Referenced by transformGraph().

{
    struct cnfa *cnfa;

    assert(regex != NULL && regex->re_magic == REMAGIC);
    cnfa = &((struct guts *) regex->re_guts)->search;

    return cnfa->pre;
}

int pg_reg_getnumcharacters ( const regex_t regex,
int  co 
)

Definition at line 196 of file regexport.c.

References assert, colormap::cd, colordesc::flags, colormap::max, colordesc::nchrs, NULL, PSEUDO, regex_t::re_guts, regex_t::re_magic, and REMAGIC.

Referenced by getColorInfo().

{
    struct colormap *cm;

    assert(regex != NULL && regex->re_magic == REMAGIC);
    cm = &((struct guts *) regex->re_guts)->cmap;

    if (co <= 0 || co > cm->max)    /* we reject 0 which is WHITE */
        return -1;
    if (cm->cd[co].flags & PSEUDO)      /* also pseudocolors (BOS etc) */
        return -1;

    return cm->cd[co].nchrs;
}

int pg_reg_getnumcolors ( const regex_t regex  ) 

Definition at line 138 of file regexport.c.

References assert, colormap::max, NULL, regex_t::re_guts, regex_t::re_magic, and REMAGIC.

Referenced by getColorInfo().

{
    struct colormap *cm;

    assert(regex != NULL && regex->re_magic == REMAGIC);
    cm = &((struct guts *) regex->re_guts)->cmap;

    return cm->max + 1;
}

int pg_reg_getnumoutarcs ( const regex_t regex,
int  st 
)

Definition at line 84 of file regexport.c.

References assert, carc::co, COLORLESS, cnfa::ncolors, cnfa::nstates, NULL, regex_t::re_guts, regex_t::re_magic, REMAGIC, and cnfa::states.

Referenced by addArcs(), and addKey().

{
    struct cnfa *cnfa;
    struct carc *ca;
    int         count;

    assert(regex != NULL && regex->re_magic == REMAGIC);
    cnfa = &((struct guts *) regex->re_guts)->search;

    if (st < 0 || st >= cnfa->nstates)
        return 0;
    count = 0;
    for (ca = cnfa->states[st]; ca->co != COLORLESS; ca++)
    {
        if (ca->co < cnfa->ncolors)
            count++;
    }
    return count;
}

int pg_reg_getnumstates ( const regex_t regex  ) 

Definition at line 40 of file regexport.c.

References assert, cnfa::nstates, NULL, regex_t::re_guts, regex_t::re_magic, and REMAGIC.

{
    struct cnfa *cnfa;

    assert(regex != NULL && regex->re_magic == REMAGIC);
    cnfa = &((struct guts *) regex->re_guts)->search;

    return cnfa->nstates;
}

void pg_reg_getoutarcs ( const regex_t regex,
int  st,
regex_arc_t arcs,
int  arcs_len 
)

Definition at line 110 of file regexport.c.

References assert, regex_arc_t::co, carc::co, COLORLESS, cnfa::ncolors, cnfa::nstates, NULL, regex_t::re_guts, regex_t::re_magic, REMAGIC, cnfa::states, carc::to, and regex_arc_t::to.

Referenced by addArcs(), and addKey().

{
    struct cnfa *cnfa;
    struct carc *ca;

    assert(regex != NULL && regex->re_magic == REMAGIC);
    cnfa = &((struct guts *) regex->re_guts)->search;

    if (st < 0 || st >= cnfa->nstates || arcs_len <= 0)
        return;
    for (ca = cnfa->states[st]; ca->co != COLORLESS; ca++)
    {
        if (ca->co < cnfa->ncolors)
        {
            arcs->co = ca->co;
            arcs->to = ca->to;
            arcs++;
            if (--arcs_len == 0)
                break;
        }
    }
}

static void scancolormap ( struct colormap cm,
int  co,
union tree t,
int  level,
chr  partial,
pg_wchar **  chars,
int *  chars_len 
) [static]

Definition at line 248 of file regexport.c.

References BYTBITS, i, NBYTS, and colormap::tree.

Referenced by pg_reg_getcharacters().

{
    int         i;

    if (level < NBYTS - 1)
    {
        /* non-leaf node */
        for (i = 0; i < BYTTAB; i++)
        {
            /*
             * We do not support search for chrs of color 0 (WHITE), so
             * all-white subtrees need not be searched.  These can be
             * recognized because they are represented by the fill blocks in
             * the colormap struct.  This typically allows us to avoid
             * scanning large regions of higher-numbered chrs.
             */
            if (t->tptr[i] == &cm->tree[level + 1])
                continue;

            /* Recursively scan next level down */
            scancolormap(cm, co,
                         t->tptr[i], level + 1,
                         (partial | (chr) i) << BYTBITS,
                         chars, chars_len);
        }
    }
    else
    {
        /* leaf node */
        for (i = 0; i < BYTTAB; i++)
        {
            if (t->tcolor[i] == co)
            {
                if (*chars_len > 0)
                {
                    **chars = partial | (chr) i;
                    (*chars)++;
                    (*chars_len)--;
                }
            }
        }
    }
}