NodeInfoInlines.h (4436B)
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/. */ 6 7 #ifndef mozilla_dom_NodeInfoInlines_h___ 8 #define mozilla_dom_NodeInfoInlines_h___ 9 10 #include "nsAtom.h" 11 #include "nsDOMString.h" 12 #include "nsGkAtoms.h" 13 #include "nsINode.h" 14 15 namespace mozilla::dom { 16 17 inline bool NodeInfo::Equals(NodeInfo* aNodeInfo) const { 18 return aNodeInfo == this || 19 aNodeInfo->Equals(mInner.mName, mInner.mPrefix, mInner.mNamespaceID); 20 } 21 22 inline bool NodeInfo::NameAndNamespaceEquals(NodeInfo* aNodeInfo) const { 23 return aNodeInfo == this || 24 aNodeInfo->Equals(mInner.mName, mInner.mNamespaceID); 25 } 26 27 inline bool NodeInfo::Equals(const nsAString& aName) const { 28 return mInner.mName->Equals(aName); 29 } 30 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()); 35 } 36 37 inline bool NodeInfo::Equals(const nsAString& aName, 38 int32_t aNamespaceID) const { 39 return mInner.mNamespaceID == aNamespaceID && mInner.mName->Equals(aName); 40 } 41 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()); 46 } 47 48 inline bool NodeInfo::QualifiedNameEquals(const nsAtom* aNameAtom) const { 49 MOZ_ASSERT(aNameAtom, "Must have name atom"); 50 if (!GetPrefixAtom()) { 51 return Equals(aNameAtom); 52 } 53 54 return aNameAtom->Equals(mQualifiedName); 55 } 56 57 } // namespace mozilla::dom 58 59 inline void CheckValidNodeInfo(uint16_t aNodeType, const nsAtom* aName, 60 int32_t aNamespaceID, const nsAtom* aExtraName) { 61 MOZ_ASSERT( 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. 76 "Invalid nodeType"); 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"); 100 } 101 102 #endif /* mozilla_dom_NodeInfoInlines_h___ */