Official reference client implementation for Cumulocity SmartREST on u-blox C027.

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Vincent Wochnik

Committer:
xinlei
Date:
Thu May 07 09:57:55 2015 +0000
Revision:
99:e369fc75c000
Parent:
96:5dfdc8568e9f
Child:
101:dbcd3bc51758
prepare for v2.1rc3.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xinlei 96:5dfdc8568e9f 1 #ifndef DICH_H
xinlei 96:5dfdc8568e9f 2 #define DICH_H
xinlei 96:5dfdc8568e9f 3 #include <string.h>
xinlei 96:5dfdc8568e9f 4 #define MAX_KEY_LEN 50
xinlei 96:5dfdc8568e9f 5 #define MAX_VALUE_LEN 50
xinlei 99:e369fc75c000 6 #define MAX_ITEM_SIZE 3
xinlei 96:5dfdc8568e9f 7
xinlei 96:5dfdc8568e9f 8 class Dict
xinlei 96:5dfdc8568e9f 9 {
xinlei 96:5dfdc8568e9f 10 public:
xinlei 96:5dfdc8568e9f 11 struct Item {
xinlei 96:5dfdc8568e9f 12 char key[MAX_KEY_LEN];
xinlei 96:5dfdc8568e9f 13 char value[MAX_VALUE_LEN];
xinlei 96:5dfdc8568e9f 14 };
xinlei 96:5dfdc8568e9f 15
xinlei 96:5dfdc8568e9f 16 Dict(): count(0) {}
xinlei 96:5dfdc8568e9f 17
xinlei 96:5dfdc8568e9f 18 const Item* at(const size_t i) const {
xinlei 96:5dfdc8568e9f 19 if (i < count) return &items[i];
xinlei 96:5dfdc8568e9f 20 else return NULL;
xinlei 96:5dfdc8568e9f 21 }
xinlei 96:5dfdc8568e9f 22
xinlei 96:5dfdc8568e9f 23 const Item* get(const char *k) const {
xinlei 96:5dfdc8568e9f 24 size_t i = find(k);
xinlei 96:5dfdc8568e9f 25 if (i < count)
xinlei 96:5dfdc8568e9f 26 return &items[i];
xinlei 96:5dfdc8568e9f 27 else
xinlei 96:5dfdc8568e9f 28 return NULL;
xinlei 96:5dfdc8568e9f 29 }
xinlei 96:5dfdc8568e9f 30
xinlei 96:5dfdc8568e9f 31 const Item* set(const char *k, const char *v) {
xinlei 96:5dfdc8568e9f 32 size_t i = find(k);
xinlei 96:5dfdc8568e9f 33 if (i < count) {
xinlei 96:5dfdc8568e9f 34 strncpy(items[i].value, v, MAX_VALUE_LEN);
xinlei 96:5dfdc8568e9f 35 return &items[i];
xinlei 96:5dfdc8568e9f 36 } else if (count < MAX_ITEM_SIZE){
xinlei 96:5dfdc8568e9f 37 ++count;
xinlei 96:5dfdc8568e9f 38 strncpy(items[i].key, k, MAX_KEY_LEN);
xinlei 96:5dfdc8568e9f 39 strncpy(items[i].value, v, MAX_VALUE_LEN);
xinlei 96:5dfdc8568e9f 40 return &items[i];
xinlei 96:5dfdc8568e9f 41 } else
xinlei 96:5dfdc8568e9f 42 return NULL;
xinlei 96:5dfdc8568e9f 43 }
xinlei 96:5dfdc8568e9f 44
xinlei 96:5dfdc8568e9f 45 size_t maxSize() const { return MAX_ITEM_SIZE; }
xinlei 96:5dfdc8568e9f 46 size_t size() const { return count; }
xinlei 96:5dfdc8568e9f 47 bool empty() const { return count==0; }
xinlei 96:5dfdc8568e9f 48 bool full() const { return count == MAX_ITEM_SIZE; }
xinlei 99:e369fc75c000 49 void clear() { count = 0; }
xinlei 99:e369fc75c000 50 size_t dump(char* buf) {
xinlei 99:e369fc75c000 51 size_t l = 0;
xinlei 99:e369fc75c000 52 for (size_t i = 0; i < count; ++i) {
xinlei 99:e369fc75c000 53 l + sprintf(buf+l, "%s=%s;", items[i].key, items[i].value);
xinlei 99:e369fc75c000 54 }
xinlei 99:e369fc75c000 55 buf[l] = 0;
xinlei 99:e369fc75c000 56 return l;
xinlei 99:e369fc75c000 57 }
xinlei 96:5dfdc8568e9f 58 virtual ~Dict() {}
xinlei 96:5dfdc8568e9f 59 protected:
xinlei 96:5dfdc8568e9f 60 size_t find(const char* k) const {
xinlei 96:5dfdc8568e9f 61 for (size_t i = 0; i < count; ++i) {
xinlei 96:5dfdc8568e9f 62 if (strncmp(items[i].key, k, MAX_KEY_LEN) == 0)
xinlei 96:5dfdc8568e9f 63 return i;
xinlei 96:5dfdc8568e9f 64 }
xinlei 96:5dfdc8568e9f 65 return count;
xinlei 96:5dfdc8568e9f 66 }
xinlei 96:5dfdc8568e9f 67 private:
xinlei 96:5dfdc8568e9f 68 Item items[MAX_ITEM_SIZE];
xinlei 96:5dfdc8568e9f 69 size_t count;
xinlei 96:5dfdc8568e9f 70 };
xinlei 96:5dfdc8568e9f 71
xinlei 96:5dfdc8568e9f 72 #endif /* DICH_H */