edits
[iotcloud.git] / version2 / src / C / CommitPart.cc
1 #include "CommitPart.h"
2 #include "ByteBuffer.h"
3
4 CommitPart::CommitPart(Slot *s, int64_t _machineId, int64_t _sequenceNumber, int64_t _transactionSequenceNumber, int _partNumber, Array<char> *_data, bool _isLastPart) :
5         Entry(s),
6         machineId(_machineId),
7         sequenceNumber(_sequenceNumber),
8         transactionSequenceNumber(_transactionSequenceNumber),
9         partNumber(_partNumber),
10         fldisLastPart(_isLastPart),
11         data(_data),
12         partId(Pair<int64_t, int32_t>(sequenceNumber, partNumber)),
13         commitId(Pair<int64_t, int64_t>(machineId, sequenceNumber)) {
14 }
15
16 CommitPart::~CommitPart() {
17         delete data;
18 }
19
20 int CommitPart::getSize() {
21         if (data == NULL) {
22                 return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char));
23         }
24         return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data->length();
25 }
26
27 void CommitPart::setSlot(Slot *s) {
28         parentslot = s;
29 }
30
31 int CommitPart::getPartNumber() {
32         return partNumber;
33 }
34
35 int CommitPart::getDataSize() {
36         return data->length();
37 }
38
39 Array<char> *CommitPart::getData() {
40         return data;
41 }
42
43 Pair<int64_t, int32_t> CommitPart::getPartId() {
44         return partId;
45 }
46
47 Pair<int64_t, int64_t> CommitPart::getCommitId() {
48         return commitId;
49 }
50
51 bool CommitPart::isLastPart() {
52         return fldisLastPart;
53 }
54
55 int64_t CommitPart::getMachineId() {
56         return machineId;
57 }
58
59 int64_t CommitPart::getTransactionSequenceNumber() {
60         return transactionSequenceNumber;
61 }
62
63 int64_t CommitPart::getSequenceNumber() {
64         return sequenceNumber;
65 }
66
67 Entry *CommitPart_decode(Slot *s, ByteBuffer *bb) {
68         int64_t machineId = bb->getLong();
69         int64_t sequenceNumber = bb->getLong();
70         int64_t transactionSequenceNumber = bb->getLong();
71         int partNumber = bb->getInt();
72         int dataSize = bb->getInt();
73         bool isLastPart = bb->get() == 1;
74
75         // Get the data
76         Array<char> *data = new Array<char>(dataSize);
77         bb->get(data);
78
79         return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
80 }
81
82 void CommitPart::encode(ByteBuffer *bb) {
83         bb->put(TypeCommitPart);
84         bb->putLong(machineId);
85         bb->putLong(sequenceNumber);
86         bb->putLong(transactionSequenceNumber);
87         bb->putInt(partNumber);
88         bb->putInt(data->length());
89
90         if (fldisLastPart) {
91                 bb->put((char)1);
92         } else {
93                 bb->put((char)0);
94         }
95
96         bb->put(data);
97 }
98
99 char CommitPart::getType() {
100         return TypeCommitPart;
101 }
102
103 Entry *CommitPart::getCopy(Slot *s) {
104         return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, new Array<char>(data), fldisLastPart);
105 }