Thinger.io Client Library for ARM mbed platform. This is a generic library that provides a base class that can be used to other develop hardware specific libraries.

Fork of ThingerClient by Alvaro Luis Bustamante

Revision:
0:b75d784c7c1a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/thinger/thinger_map.hpp	Thu Dec 24 13:18:08 2015 +0000
@@ -0,0 +1,104 @@
+// The MIT License (MIT)
+//
+// Copyright (c) 2015 THINGER LTD
+// Author: alvarolb@gmail.com (Alvaro Luis Bustamante)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#ifndef THINGER_MAP_H
+#define THINGER_MAP_H
+
+#include <string.h>
+
+template <class T>
+class thinger_map {
+
+public:
+    thinger_map() : head_(NULL), last_(NULL) {
+
+    }
+
+    virtual ~thinger_map() {
+    }
+
+public:
+
+    struct entry {
+        entry(const char* key) : key_(key), next_(NULL){
+
+        }
+
+        const char* key_;
+        struct entry * next_;
+        T value_;
+    };
+
+private:
+
+    entry * head_;
+    entry * last_;
+
+public:
+
+    T& operator[](const char* key){
+        entry * current = head_;
+        while(current != NULL){
+            if(strcmp(key, current->key_)==0){
+                return current->value_;
+            }
+            current = current->next_;
+        }
+        // TODO replace with memory allocator for allowing static memory/dynamic memory
+        current = new entry(key);
+
+        if(head_==NULL) head_ = current;
+        if(last_!=NULL) last_->next_ = current;
+        last_ = current;
+        return current->value_;
+    }
+
+    entry* begin(){
+        return head_;
+    }
+
+    entry* end(){
+        return last_;
+    }
+
+    bool empty()
+    {
+        return head_ == last_;
+    }
+
+    T* find(const char* key)
+    {
+        if(key==NULL) return NULL;
+        entry * current = head_;
+        while(current != NULL){
+            if(strcmp(key, current->key_)==0){
+                return &current->value_;
+            }
+            current = current->next_;
+        }
+        return NULL;
+    }
+
+};
+
+#endif