1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef mozilla_dom_NodeInfoInlines_h___
8 #define mozilla_dom_NodeInfoInlines_h___
12 #include "nsDOMString.h"
13 #include "nsGkAtoms.h"
15 namespace mozilla::dom
{
17 inline bool NodeInfo::Equals(NodeInfo
* aNodeInfo
) const {
18 return aNodeInfo
== this ||
19 aNodeInfo
->Equals(mInner
.mName
, mInner
.mPrefix
, mInner
.mNamespaceID
);
22 inline bool NodeInfo::NameAndNamespaceEquals(NodeInfo
* aNodeInfo
) const {
23 return aNodeInfo
== this ||
24 aNodeInfo
->Equals(mInner
.mName
, mInner
.mNamespaceID
);
27 inline bool NodeInfo::Equals(const nsAString
& aName
) const {
28 return mInner
.mName
->Equals(aName
);
31 inline bool NodeInfo::Equals(const nsAString
& aName
,
32 const nsAString
& aPrefix
) const {
33 return mInner
.mName
->Equals(aName
) &&
34 (mInner
.mPrefix
? mInner
.mPrefix
->Equals(aPrefix
) : aPrefix
.IsEmpty());
37 inline bool NodeInfo::Equals(const nsAString
& aName
,
38 int32_t aNamespaceID
) const {
39 return mInner
.mNamespaceID
== aNamespaceID
&& mInner
.mName
->Equals(aName
);
42 inline bool NodeInfo::Equals(const nsAString
& aName
, const nsAString
& aPrefix
,
43 int32_t aNamespaceID
) const {
44 return mInner
.mName
->Equals(aName
) && mInner
.mNamespaceID
== aNamespaceID
&&
45 (mInner
.mPrefix
? mInner
.mPrefix
->Equals(aPrefix
) : aPrefix
.IsEmpty());
48 inline bool NodeInfo::QualifiedNameEquals(const nsAtom
* aNameAtom
) const {
49 MOZ_ASSERT(aNameAtom
, "Must have name atom");
50 if (!GetPrefixAtom()) {
51 return Equals(aNameAtom
);
54 return aNameAtom
->Equals(mQualifiedName
);
57 } // namespace mozilla::dom
59 inline void CheckValidNodeInfo(uint16_t aNodeType
, const nsAtom
* aName
,
60 int32_t aNamespaceID
, const nsAtom
* aExtraName
) {
62 aNodeType
== nsINode::ELEMENT_NODE
||
63 aNodeType
== nsINode::ATTRIBUTE_NODE
||
64 aNodeType
== nsINode::TEXT_NODE
||
65 aNodeType
== nsINode::CDATA_SECTION_NODE
||
66 aNodeType
== nsINode::PROCESSING_INSTRUCTION_NODE
||
67 aNodeType
== nsINode::COMMENT_NODE
||
68 aNodeType
== nsINode::DOCUMENT_NODE
||
69 aNodeType
== nsINode::DOCUMENT_TYPE_NODE
||
70 aNodeType
== nsINode::DOCUMENT_FRAGMENT_NODE
||
71 aNodeType
== UINT16_MAX
,
72 // If a new type is added here, please update nsINode::MAX_NODE_TYPE and
73 // NodeTypeStrings in nsINode.cpp accordingly. Note that UINT16_MAX is
74 // only used for XUL prototype nodeinfos, which are never going to show up
75 // where NodeTypeStrings is used.
77 MOZ_ASSERT((aNodeType
== nsINode::PROCESSING_INSTRUCTION_NODE
||
78 aNodeType
== nsINode::DOCUMENT_TYPE_NODE
) == !!aExtraName
,
79 "Supply aExtraName for and only for PIs and doctypes");
80 MOZ_ASSERT(aNodeType
== nsINode::ELEMENT_NODE
||
81 aNodeType
== nsINode::ATTRIBUTE_NODE
||
82 aNodeType
== UINT16_MAX
|| aNamespaceID
== kNameSpaceID_None
,
83 "Only attributes and elements can be in a namespace");
84 MOZ_ASSERT(aName
&& aName
!= nsGkAtoms::_empty
, "Invalid localName");
85 MOZ_ASSERT(((aNodeType
== nsINode::TEXT_NODE
) ==
86 (aName
== nsGkAtoms::textTagName
)) &&
87 ((aNodeType
== nsINode::CDATA_SECTION_NODE
) ==
88 (aName
== nsGkAtoms::cdataTagName
)) &&
89 ((aNodeType
== nsINode::COMMENT_NODE
) ==
90 (aName
== nsGkAtoms::commentTagName
)) &&
91 ((aNodeType
== nsINode::DOCUMENT_NODE
) ==
92 (aName
== nsGkAtoms::documentNodeName
)) &&
93 ((aNodeType
== nsINode::DOCUMENT_FRAGMENT_NODE
) ==
94 (aName
== nsGkAtoms::documentFragmentNodeName
)) &&
95 ((aNodeType
== nsINode::DOCUMENT_TYPE_NODE
) ==
96 (aName
== nsGkAtoms::documentTypeNodeName
)) &&
97 ((aNodeType
== nsINode::PROCESSING_INSTRUCTION_NODE
) ==
98 (aName
== nsGkAtoms::processingInstructionTagName
)),
99 "Wrong localName for nodeType");
102 #endif /* mozilla_dom_NodeInfoInlines_h___ */