RPA Toolkit
Added UNICODECFG=no support in the unix build.
[rpatk.git] / rex / rexdfa.h
1 /*
2  *  Regular Pattern Analyzer Toolkit (RPA/Tk)
3  *  Copyright (c) 2009-2012 Martin Stoilov
4  *
5  *  This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  *  Martin Stoilov <martin@rpasearch.com>
19  */
20
21 /**
22  * @file rex/rexdfa.h
23  * @brief Definition of DFA interface
24  *
25  *
26  * <h2>Synopsis</h2>
27  * This file defines the data structures and the macros for the DFA implementation.
28  */
29
30 #ifndef _REXDFA_H_
31 #define _REXDFA_H_
32
33 #include "rexdfatypes.h"
34
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38
39 #define REX_DFA_HASHBITS(__bytes__, __bitsperbyte__) ((__bytes__) * (__bitsperbyte__))                                          /* Number of hashbits */
40 #define REX_DFA_HASHSIZE(__bytes__, __bitsperbyte__) (1 << REX_DFA_HASHBITS(__bytes__, __bitsperbyte__))        /* The size of the bit array in bits. */
41 #define REX_DFA_HASHMASK(__bytes__, __bitsperbyte__) (REX_DFA_HASHSIZE(__bytes__, __bitsperbyte__) - 1)         /* Mask with the number of hash bits set to 1 */
42
43 #define REX_BITARRAY_BYTE(__arr__, __entry__) (((unsigned char*)__arr__)[((unsigned int)(__entry__))>>3])
44 #define REX_BITARRAY_GET(__arr__, __entry__) ((((unsigned char*)__arr__)[((unsigned int)(__entry__))>>3] & (1 << (((unsigned int)(__entry__)) & 0x7))) ? 1 : 0)
45 #define REX_BITARRAY_SET(__arr__, __entry__) do { ((unsigned char*)__arr__)[((unsigned int)(__entry__))>>3] |= (1 << (((unsigned int)(__entry__)) & 0x7)); } while (0)
46 #define REX_BITARRAY_CLR(__arr__, __entry__) do { ((unsigned char*)__arr__)[((unsigned int)(__entry__))>>3] &= ~(1 << (((unsigned int)(__entry__)) & 0x7)); } while (0)
47
48
49 rexdfa_t *rex_dfa_create(rexuint_t nstates, rexuint_t ntrans, rexuint_t naccsubstates, rexuint_t nsubstates);
50 void rex_dfa_destroy(rexdfa_t *dfa);
51 int rex_dfa_hash(rexdfa_t *dfa, unsigned int hbytes, unsigned int hbits);
52 void rex_dfa_dumpstate(rexdfa_t *dfa, rexuint_t nstate);
53 rexdfs_t *rex_dfa_state(rexdfa_t *dfa, rexuint_t nstate);
54 rexdft_t *rex_dfa_transition(rexdfa_t *dfa, rexuint_t nstate, rexuint_t ntransition);
55 rexdfss_t *rex_dfa_substate(rexdfa_t *dfa, rexuint_t nstate, rexuint_t nsubstate);
56 rexdfss_t *rex_dfa_accsubstate(rexdfa_t *dfa, rexuint_t nstate, rexuint_t naccsubstate);
57 rexuint_t rex_dfa_next(rexdfa_t *dfa, rexuint_t nstate, rexchar_t input);
58
59 #ifdef __cplusplus
60 }
61 #endif
62
63
64 #endif /* _REXDFA_H_ */