📄 contentspecnode.hpp
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: ContentSpecNode.hpp 568078 2007-08-21 11:43:25Z amassari $ */#if !defined(CONTENTSPECNODE_HPP)#define CONTENTSPECNODE_HPP#include <xercesc/framework/XMLElementDecl.hpp>#include <xercesc/framework/MemoryManager.hpp>#include <xercesc/internal/XSerializable.hpp>XERCES_CPP_NAMESPACE_BEGINclass XMLBuffer;class Grammar;class XMLUTIL_EXPORT ContentSpecNode : public XSerializable, public XMemory{public : // ----------------------------------------------------------------------- // Class specific types // ----------------------------------------------------------------------- enum NodeTypes { Leaf = 0 , ZeroOrOne , ZeroOrMore , OneOrMore , Choice , Sequence , Any , Any_Other , Any_NS = 8 , All = 9 , Any_NS_Choice = 20 , ModelGroupSequence = 21 , Any_Lax = 22 , Any_Other_Lax = 23 , Any_NS_Lax = 24 , ModelGroupChoice = 36 , Any_Skip = 38 , Any_Other_Skip = 39 , Any_NS_Skip = 40 , UnknownType = -1 }; // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- ContentSpecNode(MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager); ContentSpecNode ( QName* const toAdopt , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); ContentSpecNode ( XMLElementDecl* const elemDecl , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); ContentSpecNode ( QName* const toAdopt , const bool copyQName , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); ContentSpecNode ( const NodeTypes type , ContentSpecNode* const firstToAdopt , ContentSpecNode* const secondToAdopt , const bool adoptFirst = true , const bool adoptSecond = true , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); ContentSpecNode(const ContentSpecNode&); ~ContentSpecNode(); // ----------------------------------------------------------------------- // Getter methods // ----------------------------------------------------------------------- QName* getElement(); const QName* getElement() const; XMLElementDecl* getElementDecl(); const XMLElementDecl* getElementDecl() const; ContentSpecNode* getFirst(); const ContentSpecNode* getFirst() const; ContentSpecNode* getSecond(); const ContentSpecNode* getSecond() const; NodeTypes getType() const; ContentSpecNode* orphanFirst(); ContentSpecNode* orphanSecond(); int getMinOccurs() const; int getMaxOccurs() const; bool isFirstAdopted() const; bool isSecondAdopted() const; // ----------------------------------------------------------------------- // Setter methods // ----------------------------------------------------------------------- void setElement(QName* const toAdopt); void setFirst(ContentSpecNode* const toAdopt); void setSecond(ContentSpecNode* const toAdopt); void setType(const NodeTypes type); void setMinOccurs(int min); void setMaxOccurs(int max); void setAdoptFirst(bool adoptFirst); void setAdoptSecond(bool adoptSecond); // ----------------------------------------------------------------------- // Miscellaneous // ----------------------------------------------------------------------- void formatSpec (XMLBuffer& bufToFill) const; bool hasAllContent(); int getMinTotalRange() const; int getMaxTotalRange() const; /*** * Support for Serialization/De-serialization ***/ DECL_XSERIALIZABLE(ContentSpecNode)private : // ----------------------------------------------------------------------- // Unimplemented constructors and operators // ----------------------------------------------------------------------- ContentSpecNode& operator=(const ContentSpecNode&); // ----------------------------------------------------------------------- // Private Data Members // // fElement // If the type is Leaf/Any*, then this is the qName of the element. If the URI // is fgPCDataElemId, then its a PCData node. Else, it is zero. // // fFirst // fSecond // The optional first and second nodes. The fType field indicates // which of these are valid. The validaty constraints are: // // Leaf = Neither valid // ZeroOrOne, ZeroOrMore = First // Choice, Sequence, All = First and Second // Any* = Neither valid // // fType // The type of node. This controls how many of the child node fields // are used. // // fAdoptFirst // Indicate if this ContentSpecNode adopts the fFirst, and is responsible // for deleting it. // // fAdoptSecond // Indicate if this ContentSpecNode adopts the fSecond, and is responsible // for deleting it. // // fMinOccurs // Indicate the minimum times that this node can occur // // fMaxOccurs // Indicate the maximum times that this node can occur // -1 (Unbounded), default (1) // ----------------------------------------------------------------------- MemoryManager* fMemoryManager; QName* fElement; XMLElementDecl* fElementDecl; ContentSpecNode* fFirst; ContentSpecNode* fSecond; NodeTypes fType; bool fAdoptFirst; bool fAdoptSecond; int fMinOccurs; int fMaxOccurs;};// ---------------------------------------------------------------------------// ContentSpecNode: Constructors and Destructor// ---------------------------------------------------------------------------inline ContentSpecNode::ContentSpecNode(MemoryManager* const manager) : fMemoryManager(manager) , fElement(0) , fElementDecl(0) , fFirst(0) , fSecond(0) , fType(ContentSpecNode::Leaf) , fAdoptFirst(true) , fAdoptSecond(true) , fMinOccurs(1) , fMaxOccurs(1){}inlineContentSpecNode::ContentSpecNode(QName* const element, MemoryManager* const manager) : fMemoryManager(manager) , fElement(0) , fElementDecl(0) , fFirst(0) , fSecond(0) , fType(ContentSpecNode::Leaf) , fAdoptFirst(true) , fAdoptSecond(true) , fMinOccurs(1) , fMaxOccurs(1){ if (element) fElement = new (fMemoryManager) QName(*element);}inlineContentSpecNode::ContentSpecNode(XMLElementDecl* const elemDecl, MemoryManager* const manager) : fMemoryManager(manager) , fElement(0) , fElementDecl(elemDecl) , fFirst(0) , fSecond(0) , fType(ContentSpecNode::Leaf) , fAdoptFirst(true) , fAdoptSecond(true) , fMinOccurs(1) , fMaxOccurs(1){ if (elemDecl) fElement = new (manager) QName(*(elemDecl->getElementName()));}inlineContentSpecNode::ContentSpecNode( QName* const element , const bool copyQName , MemoryManager* const manager) : fMemoryManager(manager) , fElement(0) , fElementDecl(0) , fFirst(0) , fSecond(0) , fType(ContentSpecNode::Leaf) , fAdoptFirst(true) , fAdoptSecond(true) , fMinOccurs(1) , fMaxOccurs(1){ if (copyQName) { if (element) fElement = new (fMemoryManager) QName(*element); } else { fElement = element; }}inlineContentSpecNode::ContentSpecNode(const NodeTypes type , ContentSpecNode* const firstAdopt , ContentSpecNode* const secondAdopt , const bool adoptFirst , const bool adoptSecond , MemoryManager* const manager) : fMemoryManager(manager) , fElement(0) , fElementDecl(0) , fFirst(firstAdopt) , fSecond(secondAdopt) , fType(type) , fAdoptFirst(adoptFirst) , fAdoptSecond(adoptSecond) , fMinOccurs(1) , fMaxOccurs(1){}inline ContentSpecNode::~ContentSpecNode(){ // Delete our children, which cause recursive cleanup if (fAdoptFirst) { delete fFirst; } if (fAdoptSecond) { delete fSecond; } delete fElement;}// ---------------------------------------------------------------------------// ContentSpecNode: Getter methods// ---------------------------------------------------------------------------inline QName* ContentSpecNode::getElement(){ return fElement;}inline const QName* ContentSpecNode::getElement() const{ return fElement;}inline XMLElementDecl* ContentSpecNode::getElementDecl(){ return fElementDecl;}inline const XMLElementDecl* ContentSpecNode::getElementDecl() const{ return fElementDecl;}inline ContentSpecNode* ContentSpecNode::getFirst(){ return fFirst;}inline const ContentSpecNode* ContentSpecNode::getFirst() const{ return fFirst;}inline ContentSpecNode* ContentSpecNode::getSecond(){ return fSecond;}inline const ContentSpecNode* ContentSpecNode::getSecond() const{ return fSecond;}inline ContentSpecNode::NodeTypes ContentSpecNode::getType() const{ return fType;}inline ContentSpecNode* ContentSpecNode::orphanFirst(){ ContentSpecNode* retNode = fFirst; fFirst = 0; return retNode;}inline ContentSpecNode* ContentSpecNode::orphanSecond(){ ContentSpecNode* retNode = fSecond; fSecond = 0; return retNode;}inline int ContentSpecNode::getMinOccurs() const{ return fMinOccurs;}inline int ContentSpecNode::getMaxOccurs() const{ return fMaxOccurs;}inline bool ContentSpecNode::isFirstAdopted() const{ return fAdoptFirst;}inline bool ContentSpecNode::isSecondAdopted() const{ return fAdoptSecond;}// ---------------------------------------------------------------------------// ContentSpecType: Setter methods// ---------------------------------------------------------------------------inline void ContentSpecNode::setElement(QName* const element){ delete fElement; fElement = 0; if (element) fElement = new (fMemoryManager) QName(*element);}inline void ContentSpecNode::setFirst(ContentSpecNode* const toAdopt){ if (fAdoptFirst) delete fFirst; fFirst = toAdopt;}inline void ContentSpecNode::setSecond(ContentSpecNode* const toAdopt){ if (fAdoptSecond) delete fSecond; fSecond = toAdopt;}inline void ContentSpecNode::setType(const NodeTypes type){ fType = type;}inline void ContentSpecNode::setMinOccurs(int min){ fMinOccurs = min;}inline void ContentSpecNode::setMaxOccurs(int max){ fMaxOccurs = max;}inline void ContentSpecNode::setAdoptFirst(bool newState){ fAdoptFirst = newState;}inline void ContentSpecNode::setAdoptSecond(bool newState){ fAdoptSecond = newState;}// ---------------------------------------------------------------------------// ContentSpecNode: Miscellaneous// ---------------------------------------------------------------------------inline bool ContentSpecNode::hasAllContent() { if (fType == ContentSpecNode::ZeroOrOne) { return (fFirst->getType() == ContentSpecNode::All); } return (fType == ContentSpecNode::All);}XERCES_CPP_NAMESPACE_END#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -