ferencd@0: #ifndef TEMPLATE_STRUCT_H ferencd@0: #define TEMPLATE_STRUCT_H ferencd@0: ferencd@0: #include ferencd@0: #include ferencd@0: #include ferencd@0: ferencd@0: /** ferencd@0: * @brief The template_struct class represents a logical structure that can be inserted into the ferencd@0: * template's content in order to have a logical grouping of various data. ferencd@0: */ ferencd@0: class template_struct ferencd@0: { ferencd@0: public: ferencd@0: ferencd@0: template_struct() = default; ferencd@0: explicit template_struct(const std::string& t) : name("name"), type(t) {} ferencd@0: template_struct(const std::string& n, const std::string& t) : name(n), type(t) {} ferencd@0: ferencd@0: virtual ~template_struct() = default; ferencd@0: ferencd@0: std::string& operator[] (const char* p) ferencd@0: { ferencd@0: return struct_members[std::string(p)]; ferencd@0: } ferencd@0: ferencd@0: const std::string& operator[] (const char* p) const ferencd@0: { ferencd@0: return struct_members.at(std::string(p)); ferencd@0: } ferencd@0: ferencd@0: std::string& operator[] (const std::string& p) ferencd@0: { ferencd@0: return struct_members[std::string(p)]; ferencd@0: } ferencd@0: ferencd@0: const std::string& operator[] (const std::string& p) const ferencd@0: { ferencd@0: return struct_members.at(std::string(p)); ferencd@0: } ferencd@0: ferencd@0: std::vector keys() const ferencd@0: { ferencd@0: std::vector v; ferencd@0: for(const auto& it : struct_members) ferencd@0: { ferencd@0: v.push_back(it.first); ferencd@0: } ferencd@0: return v; ferencd@0: } ferencd@0: ferencd@0: bool has_key(const std::string& k) ferencd@0: { ferencd@0: for(const auto& it : struct_members) ferencd@0: { ferencd@0: if(it.first == k) return true; ferencd@0: } ferencd@0: return false; ferencd@0: } ferencd@0: ferencd@0: std::string name; ferencd@0: std::string type; ferencd@0: std::map struct_members; ferencd@0: }; ferencd@0: ferencd@0: #endif // TEMPLATE_STRUCT_H