Adding Support for BooleanVar
[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 getSignature() const =0;
14         virtual ~Signature(){}
15 protected:
16         uint id;
17 };
18
19 class BooleanSig: public Signature{
20 public:
21         BooleanSig(uint id);
22         bool getValue();
23         void setValue(bool v) {value = v; }
24         virtual ~BooleanSig(){}
25         virtual string toString() const;
26         virtual string getSignature() const;
27 private:
28         int value;
29         static bool encodeSet;
30 };
31
32 class SetSig: public Signature{
33 public:
34         SetSig(uint id, Set *set);
35         virtual ~SetSig(){}
36         virtual string toString() const;
37         virtual string getSignature() const;
38 private:
39         string domain;
40 };
41
42 class ElementSig: public Signature{
43 public:
44         ElementSig(uint id, SetSig *ssig);
45         uint64_t getValue() { return value;}
46         void setValue(uint64_t v){value = v;}
47         virtual ~ElementSig(){}
48         virtual string toString() const;
49         virtual string getSignature() const;
50 private:
51         SetSig *ssig;
52         uint64_t value;
53 };
54
55 string operator+(const string& str, const Signature& sig);
56
57 #endif