diff options
-rw-r--r-- | src/transformations/uniqueid/UniqueIdTransformation.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/transformations/uniqueid/UniqueIdTransformation.cpp b/src/transformations/uniqueid/UniqueIdTransformation.cpp index 028c1ef..6065e9d 100644 --- a/src/transformations/uniqueid/UniqueIdTransformation.cpp +++ b/src/transformations/uniqueid/UniqueIdTransformation.cpp @@ -43,6 +43,11 @@ private: ManagedVector<Node> nodesWithoutId; /** + * Set preventing multi-insertion into the nodesWithoutId vector. + */ + std::unordered_set<Managed *> nodesWithoutIdSet; + + /** * Traverse the document tree -- find all elements with primitive content. */ std::queue<Rooted<StructuredEntity>> queue; @@ -80,7 +85,10 @@ void UniqueIdTransformationImpl::processVariant(const Variant &var) } else if (var.isObject()) { Rooted<Managed> obj = var.asObject(); if (!obj->hasDataKey("id") && obj->isa(&RttiTypes::Node)) { - nodesWithoutId.push_back(obj.cast<Node>()); + if (nodesWithoutIdSet.count(obj.get()) == 0) { + nodesWithoutId.push_back(obj.cast<Node>()); + nodesWithoutIdSet.insert(obj.get()); + } } } } |