text: /*============================================================================
    CMake - Cross Platform Makefile Generator
    Copyright 2000-2013 Kitware, Inc., Insight Software Consortium
  
    Distributed under the OSI-approved BSD License (the "License");
    see accompanying file Copyright.txt for details.
  
    This software is distributed WITHOUT ANY WARRANTY; without even the
    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    See the License for more information.
  ============================================================================*/
  #include "cmVisualStudioSlnData.h"
  
  //----------------------------------------------------------------------------
  const cmSlnProjectEntry*
  cmSlnData::GetProjectByGUID(const std::string& projectGUID) const
  {
    ProjectStorage::const_iterator it(ProjectsByGUID.find(projectGUID));
    if (it != ProjectsByGUID.end())
      return &it->second;
    else
      return NULL;
  }
  
  //----------------------------------------------------------------------------
  const cmSlnProjectEntry*
  cmSlnData::GetProjectByName(const std::string& projectName) const
  {
    ProjectStringIndex::const_iterator it(ProjectNameIndex.find(projectName));
    if (it != ProjectNameIndex.end())
      return &it->second->second;
    else
      return NULL;
  }
  
  //----------------------------------------------------------------------------
  std::vector<cmSlnProjectEntry> cmSlnData::GetProjects() const
  {
    ProjectStringIndex::const_iterator it(this->ProjectNameIndex.begin()),
                                       itEnd(this->ProjectNameIndex.end());
    std::vector<cmSlnProjectEntry> result;
    for (; it != itEnd; ++it)
      result.push_back(it->second->second);
    return result;
  }
  
  //----------------------------------------------------------------------------
  cmSlnProjectEntry* cmSlnData::AddProject(
    const std::string& projectGUID,
    const std::string& projectName,
    const std::string& projectRelativePath)
  {
    ProjectStorage::iterator it(ProjectsByGUID.find(projectGUID));
    if (it != ProjectsByGUID.end())
      return NULL;
    it = ProjectsByGUID.insert(
      ProjectStorage::value_type(
        projectGUID,
        cmSlnProjectEntry(projectGUID, projectName, projectRelativePath))).first;
    ProjectNameIndex[projectName] = it;
    return &it->second;
  }
  