summaryrefslogtreecommitdiff
path: root/configmgr/source/modifications.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'configmgr/source/modifications.cxx')
-rw-r--r--configmgr/source/modifications.cxx21
1 files changed, 21 insertions, 0 deletions
diff --git a/configmgr/source/modifications.cxx b/configmgr/source/modifications.cxx
index 2ad3b5ef8b..add18ceaa1 100644
--- a/configmgr/source/modifications.cxx
+++ b/configmgr/source/modifications.cxx
@@ -59,6 +59,27 @@ void Modifications::add(Path const & path) {
p->children.clear();
}
+void Modifications::remove(Path const & path) {
+ OSL_ASSERT(!path.empty());
+ Node * p = &root_;
+ for (Path::const_iterator i(path.begin());;) {
+ Node::Children::iterator j(p->children.find(*i));
+ if (j == p->children.end()) {
+ break;
+ }
+ if (++i == path.end()) {
+ p->children.erase(j);
+ if (p->children.empty()) {
+ Path parent(path);
+ parent.pop_back();
+ remove(parent);
+ }
+ break;
+ }
+ p = &j->second;
+ }
+}
+
Modifications::Node const & Modifications::getRoot() const {
return root_;
}