Mercurial > thymian
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
