mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-25 14:05:15 +00:00
55 lines
1.8 KiB
C++
55 lines
1.8 KiB
C++
/*
|
|
* Copyright (c) 2022, Ali Mohammad Pur <mpfard@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/HashMap.h>
|
|
#include <AK/NonnullOwnPtr.h>
|
|
#include <LibXML/DOM/Node.h>
|
|
|
|
namespace XML {
|
|
|
|
bool Node::operator==(Node const& other) const
|
|
{
|
|
return content.visit(
|
|
[&](Text const& text) -> bool {
|
|
auto other_text = other.content.get_pointer<Text>();
|
|
if (!other_text)
|
|
return false;
|
|
return text.builder.string_view() == other_text->builder.string_view();
|
|
},
|
|
[&](Comment const& comment) -> bool {
|
|
auto other_comment = other.content.get_pointer<Comment>();
|
|
if (!other_comment)
|
|
return false;
|
|
return comment.text == other_comment->text;
|
|
},
|
|
[&](Element const& element) -> bool {
|
|
auto other_element = other.content.get_pointer<Element>();
|
|
if (!other_element)
|
|
return false;
|
|
if (element.name != other_element->name)
|
|
return false;
|
|
if (element.attributes.size() != other_element->attributes.size())
|
|
return false;
|
|
|
|
for (auto& entry : element.attributes) {
|
|
auto it = other_element->attributes.find(entry.key);
|
|
if (it == other_element->attributes.end())
|
|
return false;
|
|
if (it->value != entry.value)
|
|
return false;
|
|
}
|
|
|
|
if (element.children.size() != other_element->children.size())
|
|
return false;
|
|
for (size_t i = 0; i < element.children.size(); ++i) {
|
|
if (element.children[i].ptr() != other_element->children[i].ptr())
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
|
|
}
|