--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/xmlparser/xerces/include/xercesc/validators/common/ContentSpecNode.hpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,483 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+/*
+ * 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_BEGIN
+
+class 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)
+{
+}
+
+inline
+ContentSpecNode::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);
+}
+
+inline
+ContentSpecNode::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()));
+}
+
+inline
+ContentSpecNode::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;
+ }
+}
+
+inline
+ContentSpecNode::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