/* 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 #include 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; } 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(); } std::vector cmPropertyMap::GetKeys() const { std::vector keyList; keyList.reserve(this->size()); for (auto const& item : *this) { keyList.push_back(item.first); } return keyList; } std::vector> cmPropertyMap::GetList() const { std::vector> kvList; kvList.reserve(this->size()); for (auto const& item : *this) { kvList.emplace_back(item.first, item.second.GetValue()); } return kvList; }