60690e3857a0626433a16fa255e17bb510215649
[satune.git] / src / Encoders / functionencoding.h
1 #ifndef FUNCTIONENCODING_H
2 #define FUNCTIONENCODING_H
3 #include "classlist.h"
4
5 enum FunctionEncodingType {
6         FUNC_UNASSIGNED, ENUMERATEIMPLICATIONS, CIRCUIT
7 };
8
9 typedef enum FunctionEncodingType FunctionEncodingType;
10
11 union ElementPredicate {
12         Element * function;
13         Boolean * predicate;
14 };
15
16 typedef union ElementPredicate ElementPredicate;
17
18 struct FunctionEncoding {
19         FunctionEncodingType type;
20         bool isFunction;//true for function, false for predicate
21         ElementPredicate op;
22 };
23
24 inline FunctionEncoding* getFunctionEncoding(ASTNode func){
25         switch(GETASTNODETYPE(func)){
26                 case ELEMFUNCRETURN:
27                         return &((ElementFunction*)func)->functionencoding;
28                 case PREDICATEOP:
29                         return &((BooleanPredicate*)func)->encoding;
30                 default:
31                         ASSERT(0);
32         }
33         return NULL;
34 }
35
36 void initFunctionEncoding(FunctionEncoding *encoding, Element *function);
37 void initPredicateEncoding(FunctionEncoding *encoding, Boolean *predicate);
38 void setFunctionEncodingType(FunctionEncoding* encoding, FunctionEncodingType type);
39 void deleteFunctionEncoding(FunctionEncoding *This);
40
41 #endif