Add key generation
[iotcloud.git] / version2 / src / C / Transaction.h
1 #ifndef TRANSACTION_H
2 #define TRANSACTION_H
3 #include "common.h"
4 #include "Pair.h"
5
6 class Transaction {
7 private:
8         Vector<TransactionPart *> *parts;
9         uint partCount;
10         Hashset<int32_t> *missingParts;
11         Vector<int32_t> *partsPendingSend;
12         bool fldisComplete;
13         bool hasLastPart;
14         Hashset<KeyValue *> *keyValueGuardSet;
15         Hashset<KeyValue *> *keyValueUpdateSet;
16         bool isDead;
17         int64_t sequenceNumber;
18         int64_t clientLocalSequenceNumber;
19         int64_t arbitratorId;
20         int64_t machineId;
21         Pair<int64_t, int64_t> transactionId;
22         int nextPartToSend;
23         bool flddidSendAPartToServer;
24         TransactionStatus *transactionStatus;
25         bool hadServerFailure;
26         void decodeTransactionData();
27
28 public:
29         Transaction();
30         void addPartEncode(TransactionPart *newPart);
31         void addPartDecode(TransactionPart *newPart);
32         void addUpdateKV(KeyValue *kv);
33         void addGuardKV(KeyValue *kv);
34         int64_t getSequenceNumber();
35         void setSequenceNumber(int64_t _sequenceNumber);
36         int64_t getClientLocalSequenceNumber();
37         Vector<TransactionPart *> *getParts();
38         bool didSendAPartToServer();
39         void resetNextPartToSend();
40         TransactionPart *getNextPartToSend();
41         void setServerFailure();
42         bool getServerFailure();
43         void resetServerFailure();
44         void setTransactionStatus(TransactionStatus *_transactionStatus);
45         TransactionStatus *getTransactionStatus();
46         void removeSentParts(Vector<int32_t> *sentParts);
47         bool didSendAllParts();
48         Hashset<KeyValue *> *getKeyValueUpdateSet();
49         int getNumberOfParts();
50         int64_t getMachineId();
51         int64_t getArbitrator();
52         bool isComplete();
53         Pair<int64_t, int64_t> *getId();
54         void setDead();
55         TransactionPart *getPart(int32_t index);
56         bool evaluateGuard(Hashtable<IoTString *, KeyValue *> *committedKeyValueTable, Hashtable<IoTString *, KeyValue *> *speculatedKeyValueTable, Hashtable<IoTString *, KeyValue *> *pendingTransactionSpeculatedKeyValueTable);
57 };
58 #endif