--- /dev/null
+#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));
+}