summaryrefslogtreecommitdiffstats
path: root/Source/cmVisualStudioSlnData.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmVisualStudioSlnData.cxx')
-rw-r--r--Source/cmVisualStudioSlnData.cxx49
1 files changed, 49 insertions, 0 deletions
diff --git a/Source/cmVisualStudioSlnData.cxx b/Source/cmVisualStudioSlnData.cxx
new file mode 100644
index 0000000..48112dd
--- /dev/null
+++ b/Source/cmVisualStudioSlnData.cxx
@@ -0,0 +1,49 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+#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;
+}