resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmVisualStudioSlnData.cxx
1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3 #include "cmVisualStudioSlnData.h"
4
5 #include <cstddef>
6 #include <utility>
7
8 #include "cmSystemTools.h"
9
10 void cmSlnProjectEntry::AddProjectConfiguration(
11   const std::string& solutionConfiguration,
12   const std::string& projectConfiguration)
13 {
14   projectConfigurationMap[solutionConfiguration] = projectConfiguration;
15 }
16
17 std::string cmSlnProjectEntry::GetProjectConfiguration(
18   const std::string& solutionConfiguration)
19 {
20   return projectConfigurationMap[solutionConfiguration];
21 }
22
23 const cm::optional<cmSlnProjectEntry> cmSlnData::GetProjectByGUID(
24   const std::string& projectGUID) const
25 {
26   ProjectStorage::const_iterator it(ProjectsByGUID.find(projectGUID));
27   if (it != ProjectsByGUID.end())
28     return it->second;
29   else
30     return cm::nullopt;
31 }
32
33 const cm::optional<cmSlnProjectEntry> cmSlnData::GetProjectByName(
34   const std::string& projectName) const
35 {
36   ProjectStringIndex::const_iterator it(ProjectNameIndex.find(projectName));
37   if (it != ProjectNameIndex.end())
38     return it->second->second;
39   else
40     return cm::nullopt;
41 }
42
43 std::vector<cmSlnProjectEntry> cmSlnData::GetProjects() const
44 {
45   ProjectStringIndex::const_iterator it(this->ProjectNameIndex.begin()),
46     itEnd(this->ProjectNameIndex.end());
47   std::vector<cmSlnProjectEntry> result;
48   for (; it != itEnd; ++it)
49     result.push_back(it->second->second);
50   return result;
51 }
52
53 cmSlnProjectEntry* cmSlnData::AddProject(
54   const std::string& projectGUID, const std::string& projectName,
55   const std::string& projectRelativePath)
56 {
57   ProjectStorage::iterator it(ProjectsByGUID.find(projectGUID));
58   if (it != ProjectsByGUID.end())
59     return NULL;
60   it = ProjectsByGUID
61          .insert(ProjectStorage::value_type(
62            projectGUID,
63            cmSlnProjectEntry(projectGUID, projectName, projectRelativePath)))
64          .first;
65   ProjectNameIndex[projectName] = it;
66   return &it->second;
67 }
68
69 std::string cmSlnData::GetConfigurationTarget(
70   const std::string& projectName, const std::string& solutionConfiguration,
71   const std::string& platformName)
72 {
73   std::string solutionTarget = solutionConfiguration + "|" + platformName;
74   cm::optional<cmSlnProjectEntry> project = GetProjectByName(projectName);
75   if (!project)
76     return platformName;
77
78   std::string projectTarget = project->GetProjectConfiguration(solutionTarget);
79   if (projectTarget.empty())
80     return platformName;
81
82   std::vector<std::string> targetElements =
83     cmSystemTools::SplitString(projectTarget, '|');
84   if (targetElements.size() != 2)
85     return platformName;
86
87   return targetElements[1];
88 }