Skip to content

Commit

Permalink
#5643: Move finger print helpers to base class
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Jun 21, 2021
1 parent dee964f commit 9c0c68d
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 18 deletions.
22 changes: 4 additions & 18 deletions libs/scene/merge/SelectionGroupMerger.h
Expand Up @@ -49,8 +49,8 @@ class SelectionGroupMerger :
selection::ISelectionGroupManager& _sourceManager;
selection::ISelectionGroupManager& _baseManager;

std::map<std::string, INodePtr> _sourceNodes;
std::map<std::string, INodePtr> _baseNodes;
NodeFingerprints _sourceNodes;
NodeFingerprints _baseNodes;

std::vector<std::size_t> _baseGroupIdsToRemove;

Expand Down Expand Up @@ -83,24 +83,10 @@ class SelectionGroupMerger :
void adjustBaseGroups()
{
// Collect all source and base nodes for easier lookup
_sourceRoot->foreachNode([&](const INodePtr& node)
{
if (!std::dynamic_pointer_cast<IGroupSelectable>(node)) return true;

_sourceNodes.emplace(NodeUtils::GetGroupMemberFingerprint(node), node);
return true;
});

_sourceNodes = collectNodeFingerprints(_sourceRoot);
_log << "Got " << _sourceNodes.size() << " groups in the source map" << std::endl;

_baseRoot->foreachNode([&](const INodePtr& node)
{
if (!std::dynamic_pointer_cast<IGroupSelectable>(node)) return true;

_baseNodes.emplace(NodeUtils::GetGroupMemberFingerprint(node), node);
return true;
});

_baseNodes = collectNodeFingerprints(_baseRoot);
_log << "Got " << _baseNodes.size() << " in the base map" << std::endl;

_log << "Start Processing base groups" << std::endl;
Expand Down
18 changes: 18 additions & 0 deletions libs/scene/merge/SelectionGroupMergerBase.h
Expand Up @@ -37,6 +37,24 @@ class SelectionGroupMergerBase

return members;
}

using NodeFingerprints = std::map<std::string, scene::INodePtr>;

NodeFingerprints collectNodeFingerprints(const IMapRootNodePtr& root)
{
NodeFingerprints result;

// Collect all source and base nodes for easier lookup
root->foreachNode([&](const INodePtr& node)
{
if (!std::dynamic_pointer_cast<IGroupSelectable>(node)) return true;

result.emplace(NodeUtils::GetGroupMemberFingerprint(node), node);
return true;
});

return result;
}
};

}
Expand Down
12 changes: 12 additions & 0 deletions libs/scene/merge/ThreeWaySelectionGroupMerger.h
Expand Up @@ -20,6 +20,10 @@ class ThreeWaySelectionGroupMerger :
selection::ISelectionGroupManager& _sourceManager;
selection::ISelectionGroupManager& _targetManager;

NodeFingerprints _baseNodes;
NodeFingerprints _sourceNodes;
NodeFingerprints _targetNodes;

public:
ThreeWaySelectionGroupMerger(const IMapRootNodePtr& baseRoot, const IMapRootNodePtr& sourceRoot, const IMapRootNodePtr& targetRoot) :
_baseRoot(baseRoot),
Expand Down Expand Up @@ -47,7 +51,15 @@ class ThreeWaySelectionGroupMerger :

void adjustTargetGroups()
{
// Collect all node fingerprints for easier lookup
_sourceNodes = collectNodeFingerprints(_sourceRoot);
_log << "Got " << _sourceNodes.size() << " groups in the source map" << std::endl;

_targetNodes = collectNodeFingerprints(_targetRoot);
_log << "Got " << _targetNodes.size() << " in the target map" << std::endl;

_baseNodes = collectNodeFingerprints(_baseRoot);
_log << "Got " << _baseNodes.size() << " in the base map" << std::endl;
}
};

Expand Down

0 comments on commit 9c0c68d

Please sign in to comment.