resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmVisualStudioSlnData.h
1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3 #pragma once
4
5 #include "cmConfigure.h" // IWYU pragma: keep
6
7 #include <map>
8 #include <string>
9 #include <vector>
10
11 #include <cm/optional>
12
13 class cmSlnProjectEntry
14 {
15 public:
16   cmSlnProjectEntry() {}
17   cmSlnProjectEntry(const std::string& guid, const std::string& name,
18                     const std::string& relativePath)
19     : Guid(guid)
20     , Name(name)
21     , RelativePath(relativePath)
22   {
23   }
24
25   std::string GetGUID() const { return Guid; }
26   std::string GetName() const { return Name; }
27   std::string GetRelativePath() const { return RelativePath; }
28
29   void AddProjectConfiguration(const std::string& solutionConfiguration,
30                                const std::string& projectConfiguration);
31
32   std::string GetProjectConfiguration(
33     const std::string& solutionConfiguration);
34
35 private:
36   std::string Guid, Name, RelativePath;
37   std::map<std::string, std::string> projectConfigurationMap;
38 };
39
40 class cmSlnData
41 {
42 public:
43   std::string GetVisualStudioVersion() const { return visualStudioVersion; }
44   void SetVisualStudioVersion(const std::string& version)
45   {
46     visualStudioVersion = version;
47   }
48
49   std::string GetMinimumVisualStudioVersion() const
50   {
51     return minimumVisualStudioVersion;
52   }
53
54   void SetMinimumVisualStudioVersion(const std::string& version)
55   {
56     minimumVisualStudioVersion = version;
57   }
58
59   const cm::optional<cmSlnProjectEntry> GetProjectByGUID(
60     const std::string& projectGUID) const;
61
62   const cm::optional<cmSlnProjectEntry> GetProjectByName(
63     const std::string& projectName) const;
64
65   std::vector<cmSlnProjectEntry> GetProjects() const;
66
67   cmSlnProjectEntry* AddProject(const std::string& projectGUID,
68                                 const std::string& projectName,
69                                 const std::string& projectRelativePath);
70
71   void AddConfiguration(const std::string& configuration)
72   {
73     solutionConfigurations.push_back(configuration);
74   }
75
76   std::string GetConfigurationTarget(const std::string& projectName,
77                                      const std::string& solutionConfiguration,
78                                      const std::string& platformName);
79
80 private:
81   std::string visualStudioVersion, minimumVisualStudioVersion;
82   using ProjectStorage = std::map<std::string, cmSlnProjectEntry>;
83   ProjectStorage ProjectsByGUID;
84   using ProjectStringIndex = std::map<std::string, ProjectStorage::iterator>;
85   ProjectStringIndex ProjectNameIndex;
86   std::vector<std::string> solutionConfigurations;
87 };