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         ~Commit();
26         void addPartDecode(CommitPart *newPart);
27         int64_t getSequenceNumber();
28         int64_t getTransactionSequenceNumber();
29         Vector<CommitPart *> *getParts();
30         void addKV(KeyValue *kv);
31         void invalidateKey(IoTString *key);
32         Hashset<KeyValue *, uintptr_t, 0> *getKeyValueUpdateSet();
33         int32_t getNumberOfParts();
34         int64_t getMachineId() { return machineId; }
35         bool isComplete() { return fldisComplete; }
36         bool isLive() { return !isDead; }
37         void setDead();
38         CommitPart *getPart(int32_t index);
39         void createCommitParts();
40         void decodeCommitData();
41         friend Commit *Commit_merge(Commit *newer, Commit *older, int64_t newSequenceNumber);
42 };
43
44 Commit *Commit_merge(Commit *newer, Commit *older, int64_t newSequenceNumber);
45 #endif