+#include "CommitPart.h"
+
+
+CommitPart::CommitPart(Slot* s, int64_t _machineId, int64_t _sequenceNumber, int64_t _transactionSequenceNumber, int _partNumber, Array<char>* _data, bool _isLastPart) :
+ Entry(s),
+ machineId(_machineId),
+ sequenceNumber(_sequenceNumber),
+ transactionSequenceNumber(_transactionSequenceNumber),
+ partNumber(_partNumber),
+ isLastPart(_isLastPart),
+ data(_data),
+ partId(new Pair<int64_t int32_t>(sequenceNumber, partNumber)),
+ commitId(new Pair<int64_t, int64_t>(machineId, sequenceNumber)) {
+}
+int CommitPart::getSize() {
+ if (data == NULL) {
+ return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char));
+ }
+ return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data->length();
+}
+void CommitPart::setSlot(Slot s) {
+ parentslot = s;
+}
+int CommitPart::getPartNumber() {
+ return partNumber;
+}
-class CommitPart extends Entry{
-
- // Max size of the part excluding the fixed size header
- static final int MAX_NON_HEADER_SIZE = 512;
-
-
- // Sequence number of the transaction this commit is for, -1 if not a cloud transaction
- int64_t machineId = -1; // Machine Id of the device that made the commit
- int64_t sequenceNumber = -1; // commit sequence number for this arbitrator
- int64_t transactionSequenceNumber = -1;
- int partNumber = -1; // Parts position in the
- Boolean isLastPart = false;
- char[] data = NULL;
-
- Pair<int64_t int32_t> partId = NULL;
- Pair<int64_t, int64_t> commitId = NULL;
-
-
- CommitPart(Slot s, int64_t _machineId, int64_t _sequenceNumber, int64_t _transactionSequenceNumber, int _partNumber, char[] _data, Boolean _isLastPart) {
- super(s);
- machineId = _machineId;
- sequenceNumber = _sequenceNumber;
- transactionSequenceNumber = _transactionSequenceNumber;
- partNumber = _partNumber;
- isLastPart = _isLastPart;
- data = _data;
-
- partId = new Pair<int64_t int32_t>(sequenceNumber, partNumber);
- commitId = new Pair<int64_t, int64_t>(machineId, sequenceNumber);
- }
-
- int getSize() {
- if (data == NULL) {
- return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char));
- }
- return (3 * sizeof(int64_t)) + (2 * sizeof(int32_t)) + (2 * sizeof(char)) + data.length;
- }
-
- void setSlot(Slot s) {
- parentslot = s;
- }
-
- int getPartNumber() {
- return partNumber;
- }
-
- int getDataSize() {
- return data.length;
- }
+int CommitPart::getDataSize() {
+ return data->length();
+}
- char[] getData() {
- return data;
- }
+Array<char> * CommitPart::getData() {
+ return data;
+}
- Pair<int64_t int32_t> getPartId() {
- return partId;
- }
+Pair<int64_t int32_t> * CommitPart::getPartId() {
+ return partId;
+}
- Pair<int64_t, int64_t> getCommitId() {
- return commitId;
- }
+Pair<int64_t, int64_t> *CommitPart::getCommitId() {
+ return commitId;
+}
- Boolean isLastPart() {
- return isLastPart;
- }
+bool CommitPart::isLastPart() {
+ return isLastPart;
+}
- int64_t getMachineId() {
- return machineId;
- }
+int64_t CommitPart::getMachineId() {
+ return machineId;
+}
- int64_t getTransactionSequenceNumber() {
- return transactionSequenceNumber;
- }
+int64_t CommitPart::getTransactionSequenceNumber() {
+ return transactionSequenceNumber;
+}
- int64_t getSequenceNumber() {
- return sequenceNumber;
- }
+int64_t CommitPart::getSequenceNumber() {
+ return sequenceNumber;
+}
- static Entry decode(Slot s, ByteBuffer bb) {
- int64_t machineId = bb->getLong();
- int64_t sequenceNumber = bb->getLong();
- int64_t transactionSequenceNumber = bb->getLong();
- int partNumber = bb->getInt();
- int dataSize = bb->getInt();
- Boolean isLastPart = bb->get() == 1;
+Entry* CommitPart_decode(Slot* s, ByteBuffer* bb) {
+ int64_t machineId = bb->getLong();
+ int64_t sequenceNumber = bb->getLong();
+ int64_t transactionSequenceNumber = bb->getLong();
+ int partNumber = bb->getInt();
+ int dataSize = bb->getInt();
+ bool isLastPart = bb->get() == 1;
+
+ // Get the data
+ Array<char> * data = new Array<char>(dataSize);
+ bb->get(data);
+
+ return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
+}
- // Get the data
- char[] data = new char[dataSize];
- bb->get(data);
+void CommitPart::encode(ByteBuffer bb) {
+ bb->put(TypeCommitPart);
+ bb->putLong(machineId);
+ bb->putLong(sequenceNumber);
+ bb->putLong(transactionSequenceNumber);
+ bb->putInt(partNumber);
+ bb->putInt(data.length);
+
+ if (isLastPart) {
+ bb->put((char)1);
+ } else {
+ bb->put((char)0);
+ }
+
+ bb->put(data);
+}
- return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
- }
+char CommitPart::getType() {
+ return TypeCommitPart;
+}
- void encode(ByteBuffer bb) {
- bb->put(Entry.TypeCommitPart);
- bb->putLong(machineId);
- bb->putLong(sequenceNumber);
- bb->putLong(transactionSequenceNumber);
- bb->putInt(partNumber);
- bb->putInt(data.length);
-
- if (isLastPart) {
- bb->put((char)1);
- } else {
- bb->put((char)0);
- }
-
- bb->put(data);
- }
-
- char getType() {
- return Entry.TypeCommitPart;
- }
-
- Entry getCopy(Slot s) {
- return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
- }
+Entry *CommitPart::getCopy(Slot *s) {
+ return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, data, isLastPart);
}