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         void addPartEncode(TransactionPart *newPart);
32         void addPartDecode(TransactionPart *newPart);
33         void addUpdateKV(KeyValue *kv);
34         void addGuardKV(KeyValue *kv);
35         int64_t getSequenceNumber();
36         void setSequenceNumber(int64_t _sequenceNumber);
37         int64_t getClientLocalSequenceNumber();
38         Vector<TransactionPart *> *getParts();
39         bool didSendAPartToServer();
40         void resetNextPartToSend();
41         TransactionPart *getNextPartToSend();
42         void setServerFailure();
43         bool getServerFailure();
44         void resetServerFailure();
45         void setTransactionStatus(TransactionStatus *_transactionStatus);
46         TransactionStatus *getTransactionStatus();
47         void removeSentParts(Vector<int32_t> *sentParts);
48         bool didSendAllParts();
49         Hashset<KeyValue *> *getKeyValueUpdateSet();
50         int getNumberOfParts();
51         int64_t getMachineId();
52         int64_t getArbitrator();
53         bool isComplete();
54         Pair<int64_t, int64_t> *getId();
55         void setDead();
56         TransactionPart *getPart(int32_t index);
57         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);
58 };
59 #endif