edits
[iotcloud.git] / version2 / src / C / Commit.h
1 #ifndef COMMIT_H
2 #define COMMIT_H
3 #include "common.h"
4 #include "KeyValue.h"
5
6 class Commit {
7 private:
8         Vector<CommitPart *> *parts;
9         uint32_t partCount;
10         Hashset<int32_t> *missingParts;
11         bool fldisComplete;
12         bool hasLastPart;
13         Hashset<KeyValue *, uintptr_t, 0> *keyValueUpdateSet;
14         bool isDead;
15         int64_t sequenceNumber;
16         int64_t machineId;
17         int64_t transactionSequenceNumber;
18         Hashset<IoTString *> *liveKeys;
19         Array<char> *convertDataToBytes();
20         void setKVsMap(Hashset<KeyValue *, uintptr_t, 0> *newKVs);
21
22 public:
23         Commit();
24         Commit(int64_t _sequenceNumber, int64_t _machineId, int64_t _transactionSequenceNumber);
25         void addPartDecode(CommitPart *newPart);
26         int64_t getSequenceNumber();
27         int64_t getTransactionSequenceNumber();
28         Vector<CommitPart *> *getParts();
29         void addKV(KeyValue *kv);
30         void invalidateKey(IoTString *key);
31         Hashset<KeyValue *, uintptr_t, 0> *getKeyValueUpdateSet();
32         int32_t getNumberOfParts();
33         int64_t getMachineId() { return machineId; }
34         bool isComplete() { return fldisComplete; }
35         bool isLive() { return !isDead; }
36         void setDead();
37         CommitPart *getPart(int32_t index);
38         void createCommitParts();
39         void decodeCommitData();
40         friend Commit *Commit_merge(Commit *newer, Commit *older, int64_t newSequenceNumber);
41 };
42
43 Commit *Commit_merge(Commit *newer, Commit *older, int64_t newSequenceNumber);
44 #endif