secureswitools/swisistools/source/xmlparser/xerces/include/xercesc/validators/schema/NamespaceScope.hpp
changeset 0 ba25891c3a9e
child 1 c42dffbd5b4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/xmlparser/xerces/include/xercesc/validators/schema/NamespaceScope.hpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,181 @@
+/*
+* 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: NamespaceScope.hpp 568078 2007-08-21 11:43:25Z amassari $
+ */
+
+#if !defined(NAMESPACESCOPE_HPP)
+#define NAMESPACESCOPE_HPP
+
+#include <xercesc/util/StringPool.hpp>
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+//
+// NamespaceScope provides a data structure for mapping namespace prefixes
+// to their URI's. The mapping accurately reflects the scoping of namespaces
+// at a particular instant in time.
+//
+
+class VALIDATORS_EXPORT NamespaceScope : public XMemory
+{
+public :
+    // -----------------------------------------------------------------------
+    //  Class specific data types
+    //
+    //  These really should be private, but some of the compilers we have to
+    //  support are too dumb to deal with that.
+    //
+    //  PrefMapElem
+    //      fURIId is the id of the URI from the validator's URI map. The
+    //      fPrefId is the id of the prefix from our own prefix pool. The
+    //      namespace stack consists of these elements.
+    //
+    //  StackElem
+    //      The fMapCapacity is how large fMap has grown so far. fMapCount
+    //      is how many of them are valid right now.
+    // -----------------------------------------------------------------------
+    struct PrefMapElem : public XMemory
+    {
+        unsigned int        fPrefId;
+        unsigned int        fURIId;
+    };
+
+    struct StackElem : public XMemory
+    {
+        PrefMapElem*        fMap;
+        unsigned int        fMapCapacity;
+        unsigned int        fMapCount;
+    };
+
+
+    // -----------------------------------------------------------------------
+    //  Constructors and Destructor
+    // -----------------------------------------------------------------------
+    NamespaceScope(MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
+    ~NamespaceScope();
+
+
+    // -----------------------------------------------------------------------
+    //  Stack access
+    // -----------------------------------------------------------------------
+    unsigned int increaseDepth();
+    unsigned int decreaseDepth();
+
+    // -----------------------------------------------------------------------
+    //  Prefix map methods
+    // -----------------------------------------------------------------------
+    void addPrefix(const XMLCh* const prefixToAdd,
+                   const unsigned int uriId);
+
+    unsigned int getNamespaceForPrefix(const XMLCh* const prefixToMap) const;
+    unsigned int getNamespaceForPrefix(const XMLCh* const prefixToMap,
+                                       const int depthLevel) const;
+
+
+    // -----------------------------------------------------------------------
+    //  Miscellaneous methods
+    // -----------------------------------------------------------------------
+    bool isEmpty() const;
+    void reset(const unsigned int emptyId);
+
+
+private :
+    // -----------------------------------------------------------------------
+    //  Unimplemented constructors and operators
+    // -----------------------------------------------------------------------
+    NamespaceScope(const NamespaceScope&);
+    NamespaceScope& operator=(const NamespaceScope&);
+
+
+    // -----------------------------------------------------------------------
+    //  Private helper methods
+    // -----------------------------------------------------------------------
+    void expandMap(StackElem* const toExpand);
+    void expandStack();
+
+
+    // -----------------------------------------------------------------------
+    //  Data members
+    //
+    //  fEmptyNamespaceId
+    //      This is the special URI id for the "" namespace, which is magic
+    //      because of the xmlns="" operation.
+    //
+    //  fPrefixPool
+    //      This is the prefix pool where prefixes are hashed and given unique
+    //      ids. These ids are used to track prefixes in the element stack.
+    //
+    //  fStack
+    //  fStackCapacity
+    //  fStackTop
+    //      This the stack array. Its an array of pointers to StackElem
+    //      structures. The capacity is the current high water mark of the
+    //      stack. The top is the current top of stack (i.e. the part of it
+    //      being used.)
+    // -----------------------------------------------------------------------
+    unsigned int  fEmptyNamespaceId;
+    unsigned int  fStackCapacity;
+    unsigned int  fStackTop;
+    XMLStringPool fPrefixPool;
+    StackElem**   fStack;
+    MemoryManager* fMemoryManager;
+};
+
+
+// ---------------------------------------------------------------------------
+//  NamespaceScope: Stack access
+// ---------------------------------------------------------------------------
+inline unsigned int
+NamespaceScope::getNamespaceForPrefix(const XMLCh* const prefixToMap) const {
+
+    return getNamespaceForPrefix(prefixToMap, (int)(fStackTop - 1));
+}
+
+// ---------------------------------------------------------------------------
+//  NamespaceScope: Miscellaneous methods
+// ---------------------------------------------------------------------------
+inline bool NamespaceScope::isEmpty() const
+{
+    return (fStackTop == 0);
+}
+
+XERCES_CPP_NAMESPACE_END
+
+#endif
+
+/**
+  * End of file NameSpaceScope.hpp
+  */
+