rename files
[iotcloud.git] / version2 / src / C / CommitPart.cpp
diff --git a/version2/src/C/CommitPart.cpp b/version2/src/C/CommitPart.cpp
new file mode 100644 (file)
index 0000000..6cb382c
--- /dev/null
@@ -0,0 +1,102 @@
+#include "CommitPart.h"
+#include "ByteBuffer.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),
+       fldisLastPart(_isLastPart),
+       refCount(1),
+       data(_data),
+       partId(Pair<int64_t, int32_t>(sequenceNumber, partNumber)),
+       commitId(Pair<int64_t, int64_t>(machineId, sequenceNumber)) {
+}
+
+CommitPart::~CommitPart() {
+       delete data;
+}
+
+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();
+}
+
+int CommitPart::getPartNumber() {
+       return partNumber;
+}
+
+int CommitPart::getDataSize() {
+       return data->length();
+}
+
+Array<char> *CommitPart::getData() {
+       return data;
+}
+
+Pair<int64_t, int32_t> * CommitPart::getPartId() {
+       return & partId;
+}
+
+Pair<int64_t, int64_t> CommitPart::getCommitId() {
+       return commitId;
+}
+
+bool CommitPart::isLastPart() {
+       return fldisLastPart;
+}
+
+int64_t CommitPart::getMachineId() {
+       return machineId;
+}
+
+int64_t CommitPart::getTransactionSequenceNumber() {
+       return transactionSequenceNumber;
+}
+
+int64_t CommitPart::getSequenceNumber() {
+       return sequenceNumber;
+}
+
+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);
+}
+
+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 (fldisLastPart) {
+               bb->put((char)1);
+       } else {
+               bb->put((char)0);
+       }
+
+       bb->put(data);
+}
+
+char CommitPart::getType() {
+       return TypeCommitPart;
+}
+
+Entry *CommitPart::getCopy(Slot *s) {
+       return new CommitPart(s, machineId, sequenceNumber, transactionSequenceNumber, partNumber, new Array<char>(data), fldisLastPart);
+}