fixing alloy performance bugs
[satune.git] / src / AlloyEnc / signature.h
1 #ifndef ELEMENTSIG_H
2 #define ELEMENTSIG_H
3 #include <string>
4 #include <iostream>
5 #include "classlist.h"
6 using namespace std;
7
8 class Signature{
9 public:
10         Signature(uint _id):id(_id){}
11         string operator+(const string& s);
12         virtual string toString() const = 0;
13         virtual string getAbsSignature() const =0;
14         virtual string getSignature() const =0;
15         virtual ~Signature(){}
16 protected:
17         uint id;
18 };
19
20 class BooleanSig: public Signature{
21 public:
22         BooleanSig(uint id);
23         bool getValue();
24         void setValue(bool v) {value = v; }
25         virtual ~BooleanSig(){}
26         virtual string toString() const;
27         virtual string getAbsSignature() const;
28         virtual string getSignature() const;
29 private:
30         int value;
31         static bool encodeAbs;
32 };
33
34 class SetSig: public Signature{
35 public:
36         SetSig(uint id, Set *set);
37         virtual ~SetSig(){}
38         virtual string toString() const;
39         virtual string getAbsSignature() const;
40         virtual string getSignature() const;
41         static bool encodeAbs;
42 private:
43         string domain;
44 };
45
46 class ElementSig: public Signature{
47 public:
48         ElementSig(uint id, SetSig *ssig);
49         uint64_t getValue() { return value;}
50         void setValue(uint64_t v){value = v;}
51         virtual ~ElementSig(){}
52         virtual string toString() const;
53         virtual string getAbsSignature() const;
54         virtual string getSignature() const;
55 private:
56         SetSig *ssig;
57         uint64_t value;
58         static bool encodeAbs;
59 };
60
61 string operator+(const string& str, const Signature& sig);
62
63 #endif