AMulet 2.0
AIG Multiplier Verification Tool
term.h
Go to the documentation of this file.
1 /*------------------------------------------------------------------------*/
9 /*------------------------------------------------------------------------*/
10 #ifndef _term_H
11 #define _term_H
12 /*------------------------------------------------------------------------*/
13 #include <stack>
14 
15 #include "variable.h"
16 /*------------------------------------------------------------------------*/
17 
23 class Term {
25  const Var * variable;
26 
29 
31  uint64_t ref;
32 
34  const uint64_t hash;
35 
38 
39  public:
40 
41 
49  Term(const Var * _v, Term * _r, uint64_t _hash, Term * _n);
50 
55  const Var * get_var() const {return variable;};
56 
61  int get_var_level() const {return variable->get_level();};
62 
67  int get_var_num() const {return variable->get_num();};
68 
73  const char * get_var_name() const {return variable->get_name();};
74 
79  Term * get_rest() const {return rest;};
80 
85  uint64_t get_hash() const {return hash;};
86 
91  Term * get_next() const {return next;};
92 
97  void set_next(Term * t) {next = t;};
98 
103  uint64_t get_ref() const {return ref;}
104 
109  uint64_t inc_ref() {return ++ref;};
110 
115  uint64_t dec_ref() {return --ref;};
116 
122  Term * copy() ;
123 
129  void print(FILE * file) const;
130 
136  unsigned size() const;
137 
147  int cmp(const Term *t) const;
148 
156  bool contains(const Var * v) const;
157 
158 
159 };
160 
161 /*------------------------------------------------------------------------*/
162 // We organize terms in a hash table that is dynamically enlarged.
163 // Every time a new term is defined, we compute a hash value and insert
164 // the term. Terms are counted using a reference counter, which is incremented
165 // and decremented depending how often the term occurs in polynomials.
166 
175 uint64_t compute_hash_term (const Var * variable, const Term * rest);
176 
180 void enlarge_terms ();
181 
190 Term * new_term (const Var * variable, Term * rest);
191 
192 
193 
202 void deallocate_term (Term * t);
203 
204 
208 void deallocate_terms();
209 
210 /*------------------------------------------------------------------------*/
211 // Terms are generated using a stack "vstack"
212 
219 void add_to_vstack(const Var* v);
220 
227 
236 Term * multiply_term(Term * t1, Term * t2);
237 
246 Term * remainder(const Term * t, const Var * v);
247 
248 #endif
void deallocate_term(Term *t)
Definition: term.cpp:152
const Var * get_var() const
Definition: term.h:55
uint64_t get_ref() const
Definition: term.h:103
Definition: variable.h:20
int get_level() const
Definition: variable.h:63
Term * build_term_from_stack()
Definition: term.cpp:199
Term * copy()
Definition: term.cpp:22
const uint64_t hash
hash value
Definition: term.h:34
int get_var_level() const
Definition: term.h:61
void deallocate_terms()
Definition: term.cpp:175
Term * get_rest() const
Definition: term.h:79
void add_to_vstack(const Var *v)
Definition: term.cpp:192
uint64_t inc_ref()
Definition: term.h:109
const char * get_name() const
Definition: variable.h:51
void set_next(Term *t)
Definition: term.h:97
Term * rest
tail in linked list
Definition: term.h:28
uint64_t get_hash() const
Definition: term.h:85
bool contains(const Var *v) const
Definition: term.cpp:79
void print(FILE *file) const
Definition: term.cpp:31
uint64_t compute_hash_term(const Var *variable, const Term *rest)
Definition: term.cpp:98
const char * get_var_name() const
Definition: term.h:73
Term * new_term(const Var *variable, Term *rest)
Definition: term.cpp:127
Term(const Var *_v, Term *_r, uint64_t _hash, Term *_n)
Definition: term.cpp:13
uint64_t dec_ref()
Definition: term.h:115
int get_var_num() const
Definition: term.h:67
contains the class Var
uint64_t ref
reference counter
Definition: term.h:31
Term * multiply_term(Term *t1, Term *t2)
Definition: term.cpp:215
Term * remainder(const Term *t, const Var *v)
Definition: term.cpp:254
unsigned size() const
Definition: term.cpp:43
int cmp(const Term *t) const
Definition: term.cpp:57
const Var * variable
head variable
Definition: term.h:25
int get_num() const
Definition: variable.h:69
Term * next
hash collision chain link
Definition: term.h:37
Definition: term.h:23
void enlarge_terms()
Definition: term.cpp:109
Term * get_next() const
Definition: term.h:91