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