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