File: multimapper.h

package info (click to toggle)
ruby-ferret 0.11.8.4%2Bdebian-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 4,368 kB
  • sloc: ansic: 69,786; ruby: 8,131; makefile: 5
file content (60 lines) | stat: -rw-r--r-- 1,422 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef FRT_MAPPER_H
#define FRT_MAPPER_H

#ifdef __cplusplus
extern "C" {
#endif

#include "hash.h"

typedef struct FrtState
{
    int  (*next)(struct FrtState *self, int c, int *states);
    void (*destroy_i)(struct FrtState *self);
    int  (*is_match)(struct FrtState *self, char **mapping);
} FrtState;

typedef struct FrtDeterministicState
{
    struct FrtDeterministicState *next[256];
    int longest_match;
    char *mapping;
    int mapping_len;
} FrtDeterministicState;

typedef struct FrtMapping
{
    char *pattern;
    char *replacement;
} FrtMapping;

typedef struct FrtMultiMapper
{
    FrtMapping **mappings;
    int size;
    int capa;
    FrtDeterministicState **dstates;
    int d_size;
    int d_capa;
    unsigned char alphabet[256];
    int a_size;
    FrtHash *dstates_map;
    FrtState **nstates;
    int nsize;
    int *next_states;
    int ref_cnt;
} FrtMultiMapper;

extern FrtMultiMapper *frt_mulmap_new();
extern void frt_mulmap_add_mapping(FrtMultiMapper *self, const char *p, const char *r);
extern void frt_mulmap_compile(FrtMultiMapper *self);
extern char *frt_mulmap_map(FrtMultiMapper *self, char *to, char *from, int capa);
extern char *frt_mulmap_dynamic_map(FrtMultiMapper *self, char *from);
extern int frt_mulmap_map_len(FrtMultiMapper *self, char *to, char *from, int capa);
extern void frt_mulmap_destroy(FrtMultiMapper *self);

#ifdef __cplusplus
} // extern "C"
#endif

#endif