Files
reasampler/src/core/view/view_tree.cpp
T

36 lines
993 B
C++

// See view_tree.h.
#include "core/view/view_tree.h"
namespace reasampler::view {
FolderTree buildFolderTree(const std::vector<TrackFolderEntry>& entries) {
FolderTree tree;
tree.nodes.reserve(entries.size());
// Stack of open folder-parent GUIDs; top is the next track's parent. A
// folder-parent's push and a closer's pop both trail their own assignment.
std::vector<std::string> open;
for (const TrackFolderEntry& e : entries) {
FolderNode node;
node.guid = e.guid;
node.parentGuid = open.empty() ? std::string{} : open.back();
node.isParent = e.folderDepth == 1;
tree.nodes.push_back(node);
if (e.folderDepth == 1) {
open.push_back(e.guid);
} else if (e.folderDepth < 0) {
int levels = -e.folderDepth;
while (levels-- > 0 && !open.empty()) {
open.pop_back();
}
}
}
return tree;
}
} // namespace reasampler::view