diff templates/template_struct.h @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/template_struct.h	Tue Aug 17 11:19:54 2021 +0200
@@ -0,0 +1,66 @@
+#ifndef TEMPLATE_STRUCT_H
+#define TEMPLATE_STRUCT_H
+
+#include <string>
+#include <vector>
+#include <map>
+
+/**
+ * @brief The template_struct class represents a logical structure that can be inserted into the
+ * template's content in order to have a logical grouping of various data.
+ */
+class template_struct
+{
+public:
+
+    template_struct() = default;
+    explicit template_struct(const std::string& t) : name("name"), type(t) {}
+    template_struct(const std::string& n, const std::string& t) : name(n), type(t) {}
+
+    virtual ~template_struct() = default;
+
+    std::string& operator[] (const char* p)
+    {
+        return struct_members[std::string(p)];
+    }
+
+    const std::string& operator[] (const char* p) const
+    {
+        return struct_members.at(std::string(p));
+    }
+
+    std::string& operator[] (const std::string& p)
+    {
+        return struct_members[std::string(p)];
+    }
+
+    const std::string& operator[] (const std::string& p) const
+    {
+        return struct_members.at(std::string(p));
+    }
+
+    std::vector<std::string> keys() const
+    {
+        std::vector<std::string> v;
+                for(const auto& it : struct_members)
+        {
+            v.push_back(it.first);
+        }
+        return v;
+    }
+
+    bool has_key(const std::string& k)
+    {
+                for(const auto& it : struct_members)
+        {
+            if(it.first == k) return true;
+        }
+        return false;
+    }
+
+    std::string name;
+    std::string type;
+    std::map<std::string, std::string> struct_members;
+};
+
+#endif // TEMPLATE_STRUCT_H