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