pdvector< pdvector<resourceHandle> > callGraphDisplay::getSelections(bool &wholeProgram, pdvector<unsigned> &wholeProgramFocus) const { // returns a vector[num-hierarchies] of vector of selections. // The number of hierarchies is defined as the number of children of the // root node. If "Whole Program" was selection, it isn't returned with // the main result; it's returned by modifying the 2 params const unsigned numHierarchies = rootPtr->getNumChildren(); pdvector < pdvector<resourceHandle> > result(numHierarchies); bool wholeProgramImplicit = true; // so far... for (unsigned i=0; i < numHierarchies; i++) { where4tree<callGraphRootNode> *hierarchyRoot = rootPtr->getChildTree(i); pdvector <const callGraphRootNode *> thisHierarchySelections = hierarchyRoot->getSelections(); if (thisHierarchySelections.size()==0) // add hierarchy's root item thisHierarchySelections += &hierarchyRoot->getNodeData(); else // since the hierarchy selection was not empty, we do _not_ // want to implicitly select whole-program wholeProgramImplicit = false; result[i].resize(thisHierarchySelections.size()); for (unsigned j=0; j < thisHierarchySelections.size(); j++) result[i][j] = thisHierarchySelections[j]->getUniqueId(); } wholeProgram = wholeProgramImplicit || rootPtr->isHighlighted(); if (wholeProgram) { // write to wholeProgramFocus: wholeProgramFocus.resize(numHierarchies); for (unsigned i=0; i < numHierarchies; i++) { where4tree<callGraphRootNode> *hierarchyRoot = rootPtr->getChildTree(i); const callGraphRootNode &hierarchyRootData = hierarchyRoot->getNodeData(); unsigned hierarchyRootUniqueId = hierarchyRootData.getUniqueId(); wholeProgramFocus[i] = hierarchyRootUniqueId; } } return result; }