Main Page | Modules | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

XSECXMLNSStack.hpp

Go to the documentation of this file.
00001 /*
00002  * Copyright 2005 The Apache Software Foundation.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *     http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 /*
00018  * XSEC
00019  *
00020  * XSECXMLNSStack := NS Stack for simple canonicalisation
00021  *
00022  * $Id: XSECXMLNSStack.hpp 394807 2006-04-17 23:15:38Z blautenb $
00023  *
00024  */
00025 
00026 #ifndef XSECXMLNSSTACK_INCLUDE
00027 #define XSECXMLNSSTACK_INCLUDE
00028 
00029 // XSEC
00030 #include <xsec/framework/XSECDefs.hpp>
00031 
00032 // Xerces
00033 
00034 XSEC_DECLARE_XERCES_CLASS(DOMNode)
00035 
00036 // General
00037 
00038 #include <vector>
00039 #include <stack>
00040 
00041 // --------------------------------------------------------------------------------
00042 //           Holder structures
00043 // --------------------------------------------------------------------------------
00044 
00045 struct XSECNSHolderStruct;
00046 struct XSECNSElementStruct;
00047 
00048 typedef struct XSECNSHolderStruct XSECNSHolder;
00049 typedef struct XSECNSElementStruct XSECNSElement;
00050 
00051 #if defined(XSEC_NO_NAMESPACES)
00052     typedef vector<XSECNSHolder *>              XSECNSHolderVectorType;
00053     typedef stack<XSECNSElement *>              XSECNSElementStackType;
00054 #else
00055     typedef std::vector<XSECNSHolder *>         XSECNSHolderVectorType;
00056     typedef std::stack<XSECNSElement *>         XSECNSElementStackType;
00057 #endif
00058 
00059 
00060 // --------------------------------------------------------------------------------
00061 //           The stack
00062 // --------------------------------------------------------------------------------
00063 
00064 
00065 class XSECXMLNSStack {
00066 
00067 public:
00068 
00069     XSECXMLNSStack();
00070     ~XSECXMLNSStack();
00071 
00072     // Stack functions
00073     void pushElement(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode * elt);
00074     void popElement();
00075 
00076     // NS Functions
00077     void addNamespace(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode * ns);
00078     XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *
00079         getFirstNamespace(void);
00080     XERCES_CPP_NAMESPACE_QUALIFIER DOMNode *
00081         getNextNamespace(void);
00082     // Mark the namespace as printed
00083     void printNamespace(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode * ns, 
00084         XERCES_CPP_NAMESPACE_QUALIFIER DOMNode * elt);
00085 
00086 private:
00087 
00088     // The stack holds all the elements, with a linked list of NS nodes
00089     // THat were pushed in for each element
00090     XSECNSElementStackType m_elements;
00091     // The vector holds all the "currently visible" namespaces for this element
00092     XSECNSHolderVectorType m_currentNS;
00093     // Hold a pointer into the visible namespace list for the current element
00094     XSECNSHolderVectorType::iterator m_currentNSIterator;
00095 
00096 };
00097 
00098 
00099 #endif /* XSECXMLNSSTACK_INCLUDE */
00100 

Generated on Sun Jan 28 19:37:24 2007 for XML-Security-C by  doxygen 1.4.2