-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDiscrim.h
86 lines (54 loc) · 2.34 KB
/
Discrim.h
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#ifndef TP_DISCRIM_H
#define TP_DISCRIM_H
/******** Discrimination Tree Indexing, more general terms. ******/
#define AC_ARG_TYPE 10 /* WARNING---these are used along with NAME, */
#define AC_NV_ARG_TYPE 9 /* COMPLEX, and VARIABLE in Header.h, so */
/* they must be different from those. */
struct discrim {
struct discrim *next; /* sibling */
union {
struct discrim *kids; /* for internal nodes */
struct gen_ptr *data; /* for leaves */
} u;
Symbol_type symbol; /* variable number or symbol number (as in term) */
char ac_type; /* for ac indexing */
};
typedef struct discrim *Discrim_ptr;
struct flat {
struct term *t;
struct flat *prev, *next, *last;
struct discrim *alternatives;
int bound;
int varnum;
int place_holder;
int num_ac_args;
int num_ac_nv_args;
};
typedef struct flat *Flat_ptr;
struct discrim_pos { /* to save position in set of subsuming terms */
struct context *subst; /* substitution */
struct gen_ptr *data; /* ident. terms from leaf of discrim tree */
struct flat *f; /* stack of states for backtracking */
};
typedef struct discrim_pos *Discrim_pos_ptr;
/* function prototypes from discrim.c */
void print_discrim_mem(FILE *fp, int heading);
void p_discrim_mem();
Discrim_ptr discrim_init();
void discrim_dealloc(Discrim_ptr d);
void print_discrim_index(FILE *fp, Discrim_ptr d);
void p_discrim_index(Discrim_ptr d);
void discrim_insert(Term_ptr t, Discrim_ptr root, void *object);
void discrim_delete(Term_ptr t, Discrim_ptr root, void *object);
void *discrim_retrieve_first(Term_ptr t, Discrim_ptr root, Context_ptr subst, Discrim_pos_ptr *ppos);
void *discrim_retrieve_next(Discrim_pos_ptr pos);
void discrim_cancel(Discrim_pos_ptr pos);
void print_discrim_wild_index(FILE *fp, Discrim_ptr d);
void p_discrim_wild_index(Discrim_ptr d);
Discrim_ptr discrim_wild_insert_ac(Term_ptr t, Discrim_ptr d);
void discrim_wild_insert(Term_ptr t, Discrim_ptr root, void *object);
void discrim_wild_delete(Term_ptr t, Discrim_ptr root, void *object);
void *discrim_wild_retrieve_first(Term_ptr t, Discrim_ptr root, Discrim_pos_ptr *ppos);
void *discrim_wild_retrieve_next(Discrim_pos_ptr pos);
void discrim_wild_cancel(Discrim_pos_ptr pos);
#endif /* ! TP_DISCRIM_H */