/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#include "cmPropertyDefinitionMap.h"

#include <utility>

void
cmPropertyDefinitionMap::DefineProperty(const std::string&    name,
                                        cmProperty::ScopeType scope,
                                        const char*           ShortDescription,
                                        const char* FullDescription, bool chain)
{
    cmPropertyDefinitionMap::iterator it = this->find(name);
    cmPropertyDefinition*             prop;
    if(it == this->end())
    {
        prop = &(*this)[name];
        prop->DefineProperty(name, scope, ShortDescription, FullDescription,
                             chain);
    }
}

bool
cmPropertyDefinitionMap::IsPropertyDefined(const std::string& name) const
{
    return this->find(name) != this->end();
}

bool
cmPropertyDefinitionMap::IsPropertyChained(const std::string& name) const
{
    cmPropertyDefinitionMap::const_iterator it = this->find(name);
    if(it == this->end())
    {
        return false;
    }

    return it->second.IsChained();
}
