text: /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
     file Copyright.txt or https://cmake.org/licensing for details.  */
  #pragma once
  
  #include "cmConfigure.h" // IWYU pragma: keep
  
  #include <string>
  #include <unordered_map>
  #include <utility>
  #include <vector>
  
  #include "cmProperty.h"
  
  /** \class cmPropertyMap
   * \brief String property map.
   */
  class cmPropertyMap
  {
  public:
    // -- General
  
    //! Clear property list
    void Clear();
  
    // -- Properties
  
    //! Set the property value
    void SetProperty(const std::string& name, const char* value);
  
    //! Append to the property value
    void AppendProperty(const std::string& name, const std::string& value,
                        bool asString = false);
  
    //! Get the property value
    cmProp GetPropertyValue(const std::string& name) const;
  
    //! Remove the property @a name from the map
    void RemoveProperty(const std::string& name);
  
    // -- Lists
  
    //! Get a sorted list of property keys
    std::vector<std::string> GetKeys() const;
  
    //! Get a sorted by key list of property key,value pairs
    std::vector<std::pair<std::string, std::string>> GetList() const;
  
  private:
    std::unordered_map<std::string, std::string> Map_;
  };
  