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