MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / sanitizeFolderTree

Function sanitizeFolderTree

app/src/DataModel/ProjectModel.cpp:109–141  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

107 */
108template<typename Folder, typename Entity>
109static void sanitizeFolderTree(std::vector<Folder>& folders, std::vector<Entity>& entities)
110{
111 QHash<int, int> parentOf;
112 QSet<int> validFolders;
113 for (const auto& f : std::as_const(folders)) {
114 validFolders.insert(f.folderId);
115 parentOf.insert(f.folderId, f.parentFolderId);
116 }
117
118 for (auto& f : folders) {
119 if (f.parentFolderId != -1 && !validFolders.contains(f.parentFolderId)) {
120 f.parentFolderId = -1;
121 continue;
122 }
123
124 QSet<int> seen;
125 int p = f.parentFolderId;
126 const int kMax = static_cast<int>(folders.size());
127 for (int i = 0; i < kMax && p != -1; ++i) {
128 if (p == f.folderId || seen.contains(p)) {
129 f.parentFolderId = -1;
130 break;
131 }
132
133 seen.insert(p);
134 p = parentOf.value(p, -1);
135 }
136 }
137
138 for (auto& e : entities)
139 if (e.parentFolderId != -1 && !validFolders.contains(e.parentFolderId))
140 e.parentFolderId = -1;
141}
142
143/**
144 * @brief Serializes any folder vector to a JSON array.

Callers 3

sanitizeGroupFoldersMethod · 0.85
sanitizeTableFoldersMethod · 0.85

Calls 3

containsMethod · 0.45
sizeMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected