X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=dfa%2Fstates.c;h=566036e2e0bcf809289bd82ab6e0b318238bc235;hb=3c5f6226f97612c0d6ac40591f600587c5ffa858;hp=289d8244c49be7c47582dcfd4006d55084acc853;hpb=6f5101be21e854a5125b489a03814cc7509236cc;p=idzebra-moved-to-github.git diff --git a/dfa/states.c b/dfa/states.c index 289d824..566036e 100644 --- a/dfa/states.c +++ b/dfa/states.c @@ -1,10 +1,23 @@ /* - * Copyright (C) 1994, Index Data I/S + * Copyright (C) 1994-1999, Index Data * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: states.c,v $ - * Revision 1.2 1995-01-24 16:00:23 adam + * Revision 1.6 1999-02-02 14:50:14 adam + * Updated WIN32 code specific sections. Changed header. + * + * Revision 1.5 1996/10/29 13:57:31 adam + * Include of zebrautl.h instead of alexutil.h. + * + * Revision 1.4 1995/09/04 12:33:28 adam + * Various cleanup. YAZ util used instead. + * + * Revision 1.3 1995/01/25 11:30:51 adam + * Simple error reporting when parsing regular expressions. + * Memory usage reduced. + * + * Revision 1.2 1995/01/24 16:00:23 adam * Added -ansi to CFLAGS. * Some changes to the dfa module. * @@ -19,12 +32,11 @@ #include #include -#include #include "dfap.h" #include "imalloc.h" -#define DFA_CHUNK 200 -#define TRAN_CHUNK 800 +#define DFA_CHUNK 40 +#define TRAN_CHUNK 100 int init_DFA_states (struct DFA_states **dfasp, SetType st, int hash) { @@ -67,7 +79,8 @@ int rm_DFA_states (struct DFA_states **dfasp) struct DFA_trans *tm, *tm1; assert (dfas); - ifree (dfas->hasharray); + if (dfas->hasharray) + ifree (dfas->hasharray); ifree (dfas->sortarray); for (tm=dfas->transmem; tm; tm=tm1) @@ -95,6 +108,7 @@ int add_DFA_state (struct DFA_states *dfas, Set *s, struct DFA_state **sp) assert (dfas); assert (*s); + assert (dfas->hasharray); sip = dfas->hasharray + (hash_Set (dfas->st, *s) % dfas->hash); for (si = *sip; si; si=si->link) if (eq_Set (dfas->st, si->set, *s)) @@ -184,4 +198,6 @@ void sort_DFA_states (struct DFA_states *dfas) imalloc (sizeof(struct DFA_state *)*dfas->no); for (s = dfas->marked; s; s=s->next) dfas->sortarray[s->no] = s; + ifree (dfas->hasharray); + dfas->hasharray = NULL; }