cmVisualStudioSlnData.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #ifndef cmVisualStudioSlnData_h
  4. #define cmVisualStudioSlnData_h
  5. #include "cmConfigure.h" // IWYU pragma: keep
  6. #include <map>
  7. #include <string>
  8. #include <vector>
  9. class cmSlnProjectEntry
  10. {
  11. public:
  12. cmSlnProjectEntry() {}
  13. cmSlnProjectEntry(const std::string& guid, const std::string& name,
  14. const std::string& relativePath)
  15. : Guid(guid)
  16. , Name(name)
  17. , RelativePath(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. private:
  24. std::string Guid, Name, RelativePath;
  25. };
  26. class cmSlnData
  27. {
  28. public:
  29. const cmSlnProjectEntry* GetProjectByGUID(
  30. const std::string& projectGUID) const;
  31. const cmSlnProjectEntry* GetProjectByName(
  32. const std::string& projectName) const;
  33. std::vector<cmSlnProjectEntry> GetProjects() const;
  34. cmSlnProjectEntry* AddProject(const std::string& projectGUID,
  35. const std::string& projectName,
  36. const std::string& projectRelativePath);
  37. private:
  38. typedef std::map<std::string, cmSlnProjectEntry> ProjectStorage;
  39. ProjectStorage ProjectsByGUID;
  40. typedef std::map<std::string, ProjectStorage::iterator> ProjectStringIndex;
  41. ProjectStringIndex ProjectNameIndex;
  42. };
  43. #endif