edits
[iotcloud.git] / version2 / src / C / TransactionPart.cc
1
2
3 class TransactionPart extends Entry {
4
5     // Max size of the part excluding the fixed size header
6     static final int MAX_NON_HEADER_SIZE = 512;
7
8     int64_t sequenceNumber = -1;
9     int64_t machineId = -1;
10     int64_t arbitratorId = -1;
11     int64_t clientLocalSequenceNumber = -1; // Sequence number of the transaction that this is a part of
12     int partNumber = -1; // Parts position in the
13     Boolean isLastPart = false;
14
15     Pair<Long, Long> transactionId = NULL;
16     Pair<Long, Integer> partId = NULL;
17
18     char[] data = NULL;
19
20     TransactionPart(Slot s, int64_t _machineId, int64_t _arbitratorId, int64_t _clientLocalSequenceNumber, int _partNumber, char[] _data, Boolean _isLastPart) {
21         super(s);
22         machineId = _machineId;
23         arbitratorId = _arbitratorId;
24         clientLocalSequenceNumber = _clientLocalSequenceNumber;
25         partNumber = _partNumber;
26         data = _data;
27         isLastPart = _isLastPart;
28
29         transactionId = new Pair<Long, Long>(machineId, clientLocalSequenceNumber);
30         partId = new Pair<Long, Integer>(clientLocalSequenceNumber, partNumber);
31
32     }
33
34     int getSize() {
35         if (data == NULL) {
36             return (4 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char));
37         }
38         return (4 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data.length;
39     }
40
41     void setSlot(Slot s) {
42         parentslot = s;
43     }
44
45     Pair<Long, Long> getTransactionId() {
46         return transactionId;
47     }
48
49     int64_t getArbitratorId() {
50         return arbitratorId;
51     }
52
53     Pair<Long, Integer> getPartId() {
54         return partId;
55     }
56
57     int getPartNumber() {
58         return partNumber;
59     }
60
61     int getDataSize() {
62         return data.length;
63     }
64
65     char[] getData() {
66         return data;
67     }
68
69     Boolean isLastPart() {
70         return isLastPart;
71     }
72
73     int64_t getMachineId() {
74         return machineId;
75     }
76
77     int64_t getClientLocalSequenceNumber() {
78         return clientLocalSequenceNumber;
79     }
80
81
82     int64_t getSequenceNumber() {
83         return sequenceNumber;
84     }
85
86     void setSequenceNumber(int64_t _sequenceNumber) {
87         sequenceNumber = _sequenceNumber;
88     }
89
90     static Entry decode(Slot s, ByteBuffer bb) {
91         int64_t sequenceNumber = bb.getLong();
92         int64_t machineId = bb.getLong();
93         int64_t arbitratorId = bb.getLong();
94         int64_t clientLocalSequenceNumber = bb.getLong();
95         int partNumber = bb.getInt();
96         int dataSize = bb.getInt();
97         Boolean isLastPart = (bb.get() == 1);
98         // Get the data
99         char[] data = new char[dataSize];
100         bb.get(data);
101
102         TransactionPart returnTransactionPart = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
103         returnTransactionPart.setSequenceNumber(sequenceNumber);
104
105         return returnTransactionPart;
106     }
107
108     void encode(ByteBuffer bb) {
109         bb.put(Entry.TypeTransactionPart);
110         bb.putLong(sequenceNumber);
111         bb.putLong(machineId);
112         bb.putLong(arbitratorId);
113         bb.putLong(clientLocalSequenceNumber);
114         bb.putInt(partNumber);
115         bb.putInt(data.length);
116
117         if (isLastPart) {
118             bb.put((char)1);
119         } else {
120             bb.put((char)0);
121         }
122
123         bb.put(data);
124     }
125
126     char getType() {
127         return Entry.TypeTransactionPart;
128     }
129
130     Entry getCopy(Slot s) {
131
132         TransactionPart copyTransaction = new TransactionPart(s, machineId, arbitratorId, clientLocalSequenceNumber, partNumber, data, isLastPart);
133         copyTransaction.setSequenceNumber(sequenceNumber);
134
135         return copyTransaction;
136     }
137 }