edits
[iotcloud.git] / version2 / src / C / KeyValue.cc
1 #include "KeyValue.h"
2 /**
3  * KeyValue entry for Slot.
4  * @author Brian Demsky <bdemsky@uci.edu>
5  * @version 1.0
6  */
7
8 KeyValue *KeyValue_decode(ByteBuffer *bb) {
9         int keylength = bb->getInt();
10         int valuelength = bb->getInt();
11         Array<char> *key = new Array<char> *(keylength);
12         bb->get(key);
13
14         if (valuelength != 0) {
15                 Array<char> *value = new Array<char>(valuelength);
16                 bb->get(value);
17                 return new KeyValue(IoTString_shallow(key), IoTString_shallow(value));
18         }
19
20         return new KeyValue(IoTString_shallow(key), NULL);
21 }
22
23 void KeyValue::encode(ByteBuffer *bb) {
24         bb->putInt(key->length());
25
26         if (value != NULL) {
27                 bb->putInt(value->length());
28         } else {
29                 bb->putInt(0);
30         }
31
32         bb->put(key->internalBytes());
33
34         if (value != NULL) {
35                 bb->put(value->internalBytes());
36         }
37 }
38
39 int KeyValue::getSize() {
40         if (value != NULL) {
41                 return 2 * sizeof(int32_t) + key->length() + value->length();
42         }
43
44         return 2 * sizeof(int32_t) + key.length();
45 }
46
47 KeyValue *KeyValue::getCopy() {
48         return new KeyValue(key, value);
49 }