MCPcopy Create free account
hub / github.com/chrxh/alien / createTreeTOs

Method createTreeTOs

source/Network/NetworkResourceService.cpp:65–258  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

63}
64
65std::vector<NetworkResourceTreeTO> NetworkResourceService::createTreeTOs(
66 std::vector<NetworkResourceRawTO> const& rawTOs,
67 std::set<std::vector<std::string>> const& collapsedFolderNames)
68{
69 NetworkResourceService::invalidateCache();
70
71 std::list<NetworkResourceTreeTO> treeTOlist;
72 for (auto const& rawTO : rawTOs) {
73
74 //parse folder names
75 std::string nameWithoutFolders;
76 std::vector<std::string> folderNames = getNameParts(rawTO->resourceName);
77 if (!folderNames.empty()) {
78 nameWithoutFolders = folderNames.back();
79 folderNames.pop_back();
80 }
81
82 std::list<NetworkResourceTreeTO>::iterator bestMatchIter;
83 int bestMatchEqualFolders;
84 if (!treeTOlist.empty()) {
85
86 //find matching node
87 auto searchIter = treeTOlist.end();
88 bestMatchIter = searchIter;
89 bestMatchEqualFolders = -1;
90 for (int i = 0; i < treeTOlist.size(); ++i) {
91 --searchIter;
92 auto otherTreeTO = *searchIter;
93 auto equalFolders = getNumEqualFolders(folderNames, otherTreeTO->folderNames);
94 if (equalFolders < bestMatchEqualFolders) {
95 break;
96 }
97 if (equalFolders > bestMatchEqualFolders) {
98 bestMatchIter = searchIter;
99 bestMatchEqualFolders = equalFolders;
100 }
101 }
102 ++bestMatchIter;
103 } else {
104 bestMatchIter = treeTOlist.begin();
105 bestMatchEqualFolders = 0;
106 }
107
108 //insert folders
109 for (int i = bestMatchEqualFolders; i < folderNames.size(); ++i) {
110 auto treeTO = std::make_shared<_NetworkResourceTreeTO>();
111 treeTO->folderNames = std::vector(folderNames.begin(), folderNames.begin() + i + 1);
112 treeTO->type = rawTO->resourceType;
113 treeTO->node = BrowserFolder();
114 bestMatchIter = treeTOlist.insert(bestMatchIter, treeTO);
115 ++bestMatchIter;
116 }
117
118 //insert leaf
119 auto treeTO = std::make_shared<_NetworkResourceTreeTO>();
120 BrowserLeaf leaf{.leafName = nameWithoutFolders, .rawTO = rawTO};
121 treeTO->type = rawTO->resourceType;
122 treeTO->folderNames = folderNames;

Callers 1

TEST_FFunction · 0.45

Calls 10

getNamePartsFunction · 0.85
getNumEqualFoldersFunction · 0.85
BrowserFolderClass · 0.85
toIntFunction · 0.85
endMethod · 0.80
sizeMethod · 0.80
beginMethod · 0.80
isLeafMethod · 0.80
resizeMethod · 0.80
appendMethod · 0.80

Tested by 1

TEST_FFunction · 0.36