Interpreter abstraction and memory bug fixes
[satune.git] / src / Interpreter / 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 ValuedSignature: public Signature{
21 public:
22         ValuedSignature(uint id);
23         int getValue();
24         void setValue(int v){value = v;}
25 protected:
26         int value;
27 };
28
29 class BooleanSig: public ValuedSignature{
30 public:
31         BooleanSig(uint id);
32         virtual ~BooleanSig(){}
33         virtual string toString() const;
34         virtual string getAbsSignature() const;
35         virtual string getSignature() const;
36 private:
37         static bool encodeAbs;
38 };
39
40 class SetSig: public Signature{
41 public:
42         SetSig(uint id, Set *set);
43         virtual ~SetSig(){}
44         virtual string toString() const;
45         virtual string getAbsSignature() const;
46         virtual string getSignature() const;
47         static bool encodeAbs;
48 private:
49         string domain;
50 };
51
52 class ElementSig: public ValuedSignature{
53 public:
54         ElementSig(uint id, SetSig *ssig);
55         virtual ~ElementSig(){}
56         virtual string toString() const;
57         virtual string getAbsSignature() const;
58         virtual string getSignature() const;
59 private:
60         SetSig *ssig;
61         static bool encodeAbs;
62 };
63
64 string operator+(const string& str, const Signature& sig);
65
66 #endif