X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=dfa%2Fstates.c;h=3e4542e7cbffd1d9a6822866aa6a3d65a515c131;hp=289d8244c49be7c47582dcfd4006d55084acc853;hb=6c9fcd3b5d3108702fa1ffc92dab4ab6060f9a19;hpb=6f5101be21e854a5125b489a03814cc7509236cc diff --git a/dfa/states.c b/dfa/states.c index 289d824..3e4542e 100644 --- a/dfa/states.c +++ b/dfa/states.c @@ -1,30 +1,37 @@ -/* - * Copyright (C) 1994, Index Data I/S - * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss - * - * $Log: states.c,v $ - * Revision 1.2 1995-01-24 16:00:23 adam - * Added -ansi to CFLAGS. - * Some changes to the dfa module. - * - * Revision 1.1 1994/09/26 10:16:58 adam - * First version of dfa module in alex. This version uses yacc to parse - * regular expressions. This should be hand-made instead. - * - */ +/* $Id: states.c,v 1.8 2005-01-15 19:38:19 adam Exp $ + Copyright (C) 1995-2005 + Index Data ApS + +This file is part of the Zebra server. + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Zebra; see the file LICENSE.zebra. If not, write to the +Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. +*/ + + #include #include #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 +74,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 +103,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 +193,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; }