| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| file Copyright.txt or https://cmake.org/licensing for details. */ |
| #include "cmPropertyMap.h" |
| |
| #include <algorithm> |
| #include <assert.h> |
| #include <utility> |
| |
| cmProperty* cmPropertyMap::GetOrCreateProperty(const std::string& name) |
| { |
| cmPropertyMap::iterator it = this->find(name); |
| cmProperty* prop; |
| if (it == this->end()) { |
| prop = &(*this)[name]; |
| } else { |
| prop = &(it->second); |
| } |
| return prop; |
| } |
| |
| std::vector<std::string> cmPropertyMap::GetPropertyList() const |
| { |
| std::vector<std::string> keyList; |
| for (auto const& i : *this) { |
| keyList.push_back(i.first); |
| } |
| std::sort(keyList.begin(), keyList.end()); |
| return keyList; |
| } |
| |
| void cmPropertyMap::SetProperty(const std::string& name, const char* value) |
| { |
| if (!value) { |
| this->erase(name); |
| return; |
| } |
| |
| cmProperty* prop = this->GetOrCreateProperty(name); |
| prop->Set(value); |
| } |
| |
| void cmPropertyMap::AppendProperty(const std::string& name, const char* value, |
| bool asString) |
| { |
| // Skip if nothing to append. |
| if (!value || !*value) { |
| return; |
| } |
| |
| cmProperty* prop = this->GetOrCreateProperty(name); |
| prop->Append(value, asString); |
| } |
| |
| const char* cmPropertyMap::GetPropertyValue(const std::string& name) const |
| { |
| assert(!name.empty()); |
| |
| cmPropertyMap::const_iterator it = this->find(name); |
| if (it == this->end()) { |
| return nullptr; |
| } |
| return it->second.GetValue(); |
| } |