27 const std::string &description,
28 const std::string &className,
31 if (propertyName.empty())
34 DescriptionMap &descriptions = m_Descriptions[className];
35 std::pair<DescriptionMapIterator, bool> ret = descriptions.insert(std::make_pair(propertyName, description));
37 if (!ret.second && overwrite)
39 ret.first->second = description;
47 const std::string &description,
48 const std::string &className,
51 if (propertyRegEx.empty())
56 std::regex checker(propertyRegEx);
58 catch (
const std::regex_error &)
63 DescriptionMap &descriptions = m_DescriptionsRegEx[className];
64 std::pair<DescriptionMapIterator, bool> ret = descriptions.insert(std::make_pair(propertyRegEx, description));
66 if (!ret.second && overwrite)
68 ret.first->second = description;
76 const std::string &className,
77 bool allowNameRegEx)
const 79 if (!propertyName.empty())
81 auto descriptionsIter = m_Descriptions.find(className);
83 if (descriptionsIter != m_Descriptions.cend())
85 auto iter = descriptionsIter->second.find(propertyName);
87 if (iter != descriptionsIter->second.end())
92 if (allowNameRegEx && !propertyName.empty())
94 auto selector = [propertyName](
const DescriptionMap::value_type &x) {
95 std::regex ex(x.first);
96 return std::regex_match(propertyName, ex);
99 auto descriptionsIter = m_DescriptionsRegEx.find(className);
101 if (descriptionsIter != m_DescriptionsRegEx.cend())
103 auto finding = std::find_if(descriptionsIter->second.cbegin(), descriptionsIter->second.cend(), selector);
105 if (finding != descriptionsIter->second.cend())
106 return finding->second;
114 const std::string &className,
115 bool allowNameRegEx)
const 117 if (!propertyName.empty())
119 auto descriptionsIter = m_Descriptions.find(className);
121 if (descriptionsIter != m_Descriptions.cend())
123 auto iter = descriptionsIter->second.find(propertyName);
125 if (iter != descriptionsIter->second.end())
130 if (allowNameRegEx && !propertyName.empty())
132 auto selector = [propertyName](
const DescriptionMap::value_type &x) {
133 std::regex ex(x.first);
134 return std::regex_match(propertyName, ex);
137 auto descriptionsIter = m_DescriptionsRegEx.find(className);
139 if (descriptionsIter != m_DescriptionsRegEx.cend())
141 auto finding = std::find_if(descriptionsIter->second.cbegin(), descriptionsIter->second.cend(), selector);
143 if (finding != descriptionsIter->second.cend())
153 m_Descriptions[className].clear();
154 m_DescriptionsRegEx[className].clear();
159 if (!propertyName.empty())
161 m_Descriptions[className].erase(propertyName);
162 m_DescriptionsRegEx[className].erase(propertyName);
void RemoveAllDescriptions(const std::string &className) override
Remove all descriptions.
bool HasDescription(const std::string &propertyName, const std::string &className, bool overwrite) const override
Check if a specific property has a description.
bool AddDescription(const std::string &propertyName, const std::string &description, const std::string &className, bool overwrite) override
Add a description for a specific property.
bool AddDescriptionRegEx(const std::string &propertyRegEx, const std::string &description, const std::string &className, bool overwrite) override
Add a description for all properties matching the property regulary expression.
~PropertyDescriptions() override
std::string GetDescription(const std::string &propertyName, const std::string &className, bool overwrite) const override
Get the description for a specific property.
void RemoveDescription(const std::string &propertyName, const std::string &className) override
Remove description of specific property.