cmVisualStudioSlnData.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. #include "cmConfigure.h" // IWYU pragma: keep
  5. #include <map>
  6. #include <string>
  7. #include <vector>
  8. #include <cm/optional>
  9. class cmSlnProjectEntry
  10. {
  11. public:
  12. cmSlnProjectEntry() = default;
  13. cmSlnProjectEntry(std::string guid, std::string name,
  14. std::string relativePath)
  15. : Guid(std::move(guid))
  16. , Name(std::move(name))
  17. , RelativePath(std::move(relativePath))
  18. {
  19. }
  20. std::string GetGUID() const { return Guid; }
  21. std::string GetName() const { return Name; }
  22. std::string GetRelativePath() const { return RelativePath; }
  23. void AddProjectConfiguration(const std::string& solutionConfiguration,
  24. const std::string& projectConfiguration);
  25. std::string GetProjectConfiguration(
  26. const std::string& solutionConfiguration);
  27. private:
  28. std::string Guid, Name, RelativePath;
  29. std::map<std::string, std::string> projectConfigurationMap;
  30. };
  31. class cmSlnData
  32. {
  33. public:
  34. std::string GetVisualStudioVersion() const { return visualStudioVersion; }
  35. void SetVisualStudioVersion(const std::string& version)
  36. {
  37. visualStudioVersion = version;
  38. }
  39. std::string GetMinimumVisualStudioVersion() const
  40. {
  41. return minimumVisualStudioVersion;
  42. }
  43. void SetMinimumVisualStudioVersion(const std::string& version)
  44. {
  45. minimumVisualStudioVersion = version;
  46. }
  47. const cm::optional<cmSlnProjectEntry> GetProjectByGUID(
  48. const std::string& projectGUID) const;
  49. const cm::optional<cmSlnProjectEntry> GetProjectByName(
  50. const std::string& projectName) const;
  51. std::vector<cmSlnProjectEntry> GetProjects() const;
  52. cmSlnProjectEntry* AddProject(const std::string& projectGUID,
  53. const std::string& projectName,
  54. const std::string& projectRelativePath);
  55. void AddConfiguration(const std::string& configuration)
  56. {
  57. solutionConfigurations.push_back(configuration);
  58. }
  59. std::string GetConfigurationTarget(const std::string& projectName,
  60. const std::string& solutionConfiguration,
  61. const std::string& platformName);
  62. private:
  63. std::string visualStudioVersion, minimumVisualStudioVersion;
  64. using ProjectStorage = std::map<std::string, cmSlnProjectEntry>;
  65. ProjectStorage ProjectsByGUID;
  66. using ProjectStringIndex = std::map<std::string, ProjectStorage::iterator>;
  67. ProjectStringIndex ProjectNameIndex;
  68. std::vector<std::string> solutionConfigurations;
  69. };