diff options
Diffstat (limited to 'dom/base/NodeInfoInlines.h')
-rw-r--r-- | dom/base/NodeInfoInlines.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/dom/base/NodeInfoInlines.h b/dom/base/NodeInfoInlines.h new file mode 100644 index 0000000000..e7a11e1864 --- /dev/null +++ b/dom/base/NodeInfoInlines.h @@ -0,0 +1,102 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_NodeInfoInlines_h___ +#define mozilla_dom_NodeInfoInlines_h___ + +#include "nsAtom.h" +#include "nsINode.h" +#include "nsDOMString.h" +#include "nsGkAtoms.h" + +namespace mozilla::dom { + +inline bool NodeInfo::Equals(NodeInfo* aNodeInfo) const { + return aNodeInfo == this || + aNodeInfo->Equals(mInner.mName, mInner.mPrefix, mInner.mNamespaceID); +} + +inline bool NodeInfo::NameAndNamespaceEquals(NodeInfo* aNodeInfo) const { + return aNodeInfo == this || + aNodeInfo->Equals(mInner.mName, mInner.mNamespaceID); +} + +inline bool NodeInfo::Equals(const nsAString& aName) const { + return mInner.mName->Equals(aName); +} + +inline bool NodeInfo::Equals(const nsAString& aName, + const nsAString& aPrefix) const { + return mInner.mName->Equals(aName) && + (mInner.mPrefix ? mInner.mPrefix->Equals(aPrefix) : aPrefix.IsEmpty()); +} + +inline bool NodeInfo::Equals(const nsAString& aName, + int32_t aNamespaceID) const { + return mInner.mNamespaceID == aNamespaceID && mInner.mName->Equals(aName); +} + +inline bool NodeInfo::Equals(const nsAString& aName, const nsAString& aPrefix, + int32_t aNamespaceID) const { + return mInner.mName->Equals(aName) && mInner.mNamespaceID == aNamespaceID && + (mInner.mPrefix ? mInner.mPrefix->Equals(aPrefix) : aPrefix.IsEmpty()); +} + +inline bool NodeInfo::QualifiedNameEquals(const nsAtom* aNameAtom) const { + MOZ_ASSERT(aNameAtom, "Must have name atom"); + if (!GetPrefixAtom()) { + return Equals(aNameAtom); + } + + return aNameAtom->Equals(mQualifiedName); +} + +} // namespace mozilla::dom + +inline void CheckValidNodeInfo(uint16_t aNodeType, const nsAtom* aName, + int32_t aNamespaceID, const nsAtom* aExtraName) { + MOZ_ASSERT( + aNodeType == nsINode::ELEMENT_NODE || + aNodeType == nsINode::ATTRIBUTE_NODE || + aNodeType == nsINode::TEXT_NODE || + aNodeType == nsINode::CDATA_SECTION_NODE || + aNodeType == nsINode::PROCESSING_INSTRUCTION_NODE || + aNodeType == nsINode::COMMENT_NODE || + aNodeType == nsINode::DOCUMENT_NODE || + aNodeType == nsINode::DOCUMENT_TYPE_NODE || + aNodeType == nsINode::DOCUMENT_FRAGMENT_NODE || + aNodeType == UINT16_MAX, + // If a new type is added here, please update nsINode::MAX_NODE_TYPE and + // NodeTypeStrings in nsINode.cpp accordingly. Note that UINT16_MAX is + // only used for XUL prototype nodeinfos, which are never going to show up + // where NodeTypeStrings is used. + "Invalid nodeType"); + MOZ_ASSERT((aNodeType == nsINode::PROCESSING_INSTRUCTION_NODE || + aNodeType == nsINode::DOCUMENT_TYPE_NODE) == !!aExtraName, + "Supply aExtraName for and only for PIs and doctypes"); + MOZ_ASSERT(aNodeType == nsINode::ELEMENT_NODE || + aNodeType == nsINode::ATTRIBUTE_NODE || + aNodeType == UINT16_MAX || aNamespaceID == kNameSpaceID_None, + "Only attributes and elements can be in a namespace"); + MOZ_ASSERT(aName && aName != nsGkAtoms::_empty, "Invalid localName"); + MOZ_ASSERT(((aNodeType == nsINode::TEXT_NODE) == + (aName == nsGkAtoms::textTagName)) && + ((aNodeType == nsINode::CDATA_SECTION_NODE) == + (aName == nsGkAtoms::cdataTagName)) && + ((aNodeType == nsINode::COMMENT_NODE) == + (aName == nsGkAtoms::commentTagName)) && + ((aNodeType == nsINode::DOCUMENT_NODE) == + (aName == nsGkAtoms::documentNodeName)) && + ((aNodeType == nsINode::DOCUMENT_FRAGMENT_NODE) == + (aName == nsGkAtoms::documentFragmentNodeName)) && + ((aNodeType == nsINode::DOCUMENT_TYPE_NODE) == + (aName == nsGkAtoms::documentTypeNodeName)) && + ((aNodeType == nsINode::PROCESSING_INSTRUCTION_NODE) == + (aName == nsGkAtoms::processingInstructionTagName)), + "Wrong localName for nodeType"); +} + +#endif /* mozilla_dom_NodeInfoInlines_h___ */ |