rename files
[iotcloud.git] / version2 / src / C / KeyValue.cpp
diff --git a/version2/src/C/KeyValue.cpp b/version2/src/C/KeyValue.cpp
new file mode 100644 (file)
index 0000000..8aea6f2
--- /dev/null
@@ -0,0 +1,51 @@
+#include "KeyValue.h"
+#include "ByteBuffer.h"
+#include "IoTString.h"
+/**
+ * KeyValue entry for Slot.
+ * @author Brian Demsky <bdemsky@uci.edu>
+ * @version 1.0
+ */
+
+KeyValue::~KeyValue() {
+       delete key;
+       delete value;
+}
+
+KeyValue *KeyValue_decode(ByteBuffer *bb) {
+       int keylength = bb->getInt();
+       int valuelength = bb->getInt();
+       Array<char> *key = new Array<char>(keylength);
+       bb->get(key);
+
+       if (valuelength != 0) {
+               Array<char> *value = new Array<char>(valuelength);
+               bb->get(value);
+               return new KeyValue(IoTString_shallow(key), IoTString_shallow(value));
+       }
+
+       return new KeyValue(IoTString_shallow(key), NULL);
+}
+
+void KeyValue::encode(ByteBuffer *bb) {
+       bb->putInt(key->length());
+       if (value != NULL) {
+               bb->putInt(value->length());
+       } else {
+               bb->putInt(0);
+       }
+       bb->put(key->internalBytes());
+       if (value != NULL) {
+               bb->put(value->internalBytes());
+       }
+}
+
+int KeyValue::getSize() {
+       if (value != NULL)
+               return 2 * sizeof(int32_t) + key->length() + value->length();
+       return 2 * sizeof(int32_t) + key->length();
+}
+
+KeyValue *KeyValue::getCopy() {
+       return new KeyValue(new IoTString(key), new IoTString(value));
+}