Template fixes for gcc
authorcantor <cantor@de75baf8-a10c-0410-a50a-987c0e22f00f>
Sat, 4 Mar 2006 02:28:14 +0000 (02:28 +0000)
committercantor <cantor@de75baf8-a10c-0410-a50a-987c0e22f00f>
Sat, 4 Mar 2006 02:28:14 +0000 (02:28 +0000)
git-svn-id: https://svn.middleware.georgetown.edu/cpp-xmltooling/trunk@43 de75baf8-a10c-0410-a50a-987c0e22f00f

xmltooling/Makefile.am
xmltooling/util/XMLObjectChildrenList.h

index b9c8d94..7e79c2f 100644 (file)
@@ -28,36 +28,37 @@ utilinclude_HEADERS = \
     util/NDC.h \
     util/ParserPool.h \
     util/XMLConstants.h \
-    util/XMLHelper.h
+    util/XMLHelper.h \
+    util/XMLObjectChildrenList.h
 
 ioincludedir = \
     $(includedir)/xmltooling/io
 
 ioinclude_HEADERS = \
-       io/AbstractXMLObjectUnmarshaller.h \
+    io/AbstractXMLObjectUnmarshaller.h \
     io/Marshaller.h \
     io/Unmarshaller.h
 
 noinst_HEADERS = \
-       internal.h \
-       impl/UnknownElement.h
+    internal.h \
+    impl/UnknownElement.h
 
 libxmltooling_la_SOURCES = \
-       AbstractDOMCachingXMLObject.cpp \
-       Namespace.cpp \
-       QName.cpp \
-       unicode.cpp \
-       XMLObjectBuilder.cpp \
-       XMLToolingConfig.cpp \
-       impl/UnknownElement.cpp \
-       io/AbstractXMLObjectMarshaller.cpp \
-       io/AbstractXMLObjectUnmarshaller.cpp \
-       io/Marshaller.cpp \
-       io/Unmarshaller.cpp \
-       util/NDC.cpp \
-       util/ParserPool.cpp \
-       util/XMLConstants.cpp \
-       util/XMLHelper.cpp
+    AbstractDOMCachingXMLObject.cpp \
+    Namespace.cpp \
+    QName.cpp \
+    unicode.cpp \
+    XMLObjectBuilder.cpp \
+    XMLToolingConfig.cpp \
+    impl/UnknownElement.cpp \
+    io/AbstractXMLObjectMarshaller.cpp \
+    io/AbstractXMLObjectUnmarshaller.cpp \
+    io/Marshaller.cpp \
+    io/Unmarshaller.cpp \
+    util/NDC.cpp \
+    util/ParserPool.cpp \
+    util/XMLConstants.cpp \
+    util/XMLHelper.cpp
 
 # this is different from the project version
 # http://sources.redhat.com/autobook/autobook/autobook_91.html
index b528798..a494952 100644 (file)
-/*\r
- *  Copyright 2001-2006 Internet2\r
- * \r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- *     http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-\r
-/**\r
- * @file XMLObjectChildrenList.h\r
- * \r
- * STL-compatible container wrapper\r
- */\r
-\r
-#if !defined(__xmltooling_list_h__)\r
-#define __xmltooling_list_h__\r
-\r
-#include <xmltooling/DOMCachingXMLObject.h>\r
-#include <xmltooling/exceptions.h>\r
-\r
-#define ListOf(type) xmltooling::XMLObjectChildrenList<type>\r
-\r
-namespace xmltooling {\r
-\r
-    // Forward reference\r
-    template <class _Tx, class _Ty=XMLObject> class XMLObjectChildrenList;\r
-\r
-    /**\r
-     * STL iterator that mediates access to an iterator over typed XML children.\r
-     * @param _Ty   a bidrectional sequence of the subtype to iterate over\r
-     */\r
-    template <class _Ty>\r
-    class XMLObjectChildrenIterator\r
-    {\r
-        typename _Ty::iterator m_iter;\r
-        template <class _Tx, class _Ty> friend class XMLObjectChildrenList;\r
-    public:\r
-        typedef typename _Ty::iterator::iterator_category iterator_category;\r
-        typedef typename _Ty::iterator::value_type value_type;\r
-           typedef typename _Ty::iterator::reference reference;\r
-           typedef typename _Ty::iterator::pointer pointer;\r
-        typedef typename _Ty::const_iterator::reference const_reference;\r
-           typedef typename _Ty::const_iterator::pointer const_pointer;\r
-           typedef typename _Ty::iterator::difference_type difference_type;\r
-\r
-           XMLObjectChildrenIterator() {\r
-           }\r
-\r
-           XMLObjectChildrenIterator(typename _Ty::iterator& iter) {\r
-                   m_iter=iter;\r
-           }\r
-\r
-           const_reference operator*() const {\r
-                   return *m_iter;\r
-           }\r
-\r
-        pointer operator->() const {\r
-            return (&**this);\r
-           }\r
-\r
-           XMLObjectChildrenIterator& operator++() {\r
-                   // preincrement\r
-                   ++m_iter;\r
-                   return (*this);\r
-           }\r
-\r
-           XMLObjectChildrenIterator& operator--() {\r
-                   // predecrement\r
-                   --m_iter;\r
-                   return (*this);\r
-           }\r
-\r
-           XMLObjectChildrenIterator operator++(int) {\r
-                   // postincrement\r
-                   XMLObjectChildrenIterator _Tmp = *this;\r
-                   ++*this;\r
-                   return (_Tmp);\r
-           }\r
-\r
-           XMLObjectChildrenIterator operator--(int) {\r
-                   // postdecrement\r
-                   XMLObjectChildrenIterator _Tmp = *this;\r
-                   --*this;\r
-                   return (_Tmp);\r
-           }\r
-\r
-        XMLObjectChildrenIterator& operator+=(difference_type _Off) {\r
-            // increment by integer\r
-            m_iter += _Off;\r
-            return (*this);\r
-        }\r
-\r
-        XMLObjectChildrenIterator operator+(difference_type _Off) const {\r
-            // return this + integer\r
-            XMLObjectChildrenIterator _Tmp = *this;\r
-            return (_Tmp += _Off);\r
-        }\r
-\r
-        XMLObjectChildrenIterator& operator-=(difference_type _Off) {\r
-            // decrement by integer\r
-            return (*this += -_Off);\r
-        }\r
-\r
-        XMLObjectChildrenIterator operator-(difference_type _Off) const {\r
-            // return this - integer\r
-            XMLObjectChildrenIterator _Tmp = *this;\r
-            return (_Tmp -= _Off);\r
-        }\r
-\r
-        difference_type operator-(const XMLObjectChildrenIterator& _Right) const {\r
-            // return difference of iterators\r
-            return m_iter - _Right.m_iter);\r
-        }\r
-\r
-        const_reference operator[](difference_type _Off) const {\r
-            // subscript\r
-            return (*(*this + _Off));\r
-        }\r
-\r
-        bool operator==(const XMLObjectChildrenIterator &_Right) const {\r
-                   // test for iterator equality\r
-                   return (m_iter == _Right.m_iter);\r
-           }\r
-\r
-           bool operator!=(const XMLObjectChildrenIterator &_Right) const {\r
-                   // test for iterator inequality\r
-                   return (!(m_iter == _Right.m_iter));\r
-           }\r
-    };\r
-\r
-    /**\r
-     * STL-compatible container that mediates access to underlying lists of typed XML children.\r
-     * @param _Tx   the subtype to expose a container over\r
-     * @param _Ty   the base type in the underlying list (defaults to XMLObject)\r
-     */\r
-    template <class _Tx, class _Ty>\r
-    class XMLObjectChildrenList\r
-    {\r
-        typedef typename std::vector<_Tx*> container;\r
-        typename container& m_vector;\r
-        typename std::list<_Ty*>& m_list;\r
-        typename std::list<_Ty*>::iterator m_fence;\r
-        XMLObject* m_parent;\r
-\r
-       public:\r
-        typedef typename container::value_type value_type;\r
-        typedef typename container::reference reference;\r
-        typedef typename container::const_reference const_reference;\r
-        typedef typename container::difference_type difference_type;\r
-        typedef typename container::size_type size_type;\r
-\r
-        // We override the iterator types with our constrained wrapper.\r
-        typedef XMLObjectChildrenIterator<typename container> iterator;\r
-           typedef const XMLObjectChildrenIterator<typename container> const_iterator;\r
-\r
-        /**\r
-         * Constructor to expose a typed collection of children backed by a list of a base type.\r
-         *\r
-         * @param parent    parent object of the collection\r
-         * @param v         underlying vector of iterators that reference the children\r
-         * @param backing   backing list for children\r
-         * @param ins_fence a marker designating where new children of this type should be added\r
-         */\r
-           XMLObjectChildrenList(\r
-            XMLObject* parent,\r
-            typename container& v,\r
-            typename std::list<_Ty*>& backing,\r
-            typename std::list<_Ty*>::iterator ins_fence\r
-            ) : m_parent(parent), m_vector(v), m_list(backing), m_fence(ins_fence) {\r
-           }\r
-\r
-           size_type size() const {\r
-                   // return length of sequence\r
-                   return m_vector.size();\r
-           }\r
-\r
-           bool empty() const {\r
-                   // test if sequence is empty\r
-                   return m_vector.empty();\r
-           }\r
-\r
-           iterator begin() {\r
-                   // return iterator for beginning of mutable sequence\r
-                   return m_vector.begin();\r
-           }\r
-\r
-           iterator end() {\r
-                   // return iterator for end of mutable sequence\r
-                   return m_vector.end();\r
-           }\r
-\r
-           const_iterator begin() const {\r
-                   // return iterator for beginning of const sequence\r
-                   return m_vector.begin();\r
-           }\r
-\r
-           const_iterator end() const {\r
-                   // return iterator for end of const sequence\r
-                   return m_vector.end();\r
-           }\r
-\r
-        const_reference at(size_type _Pos) const {\r
-            // subscript nonmutable sequence with checking\r
-            return m_vector.at(_Pos);\r
-        }\r
-\r
-        const_reference operator[](size_type _Pos) const {\r
-            // subscript nonmutable sequence\r
-            return m_vector[_Pos];\r
-        }\r
-\r
-        const_reference front() const {\r
-            // return first element of nonmutable sequence\r
-            return (*begin());\r
-        }\r
-\r
-        const_reference back() const {\r
-            // return last element of nonmutable sequence\r
-            return *(m_vector.back());\r
-        }\r
-\r
-           void push_back(const_reference _Val) {\r
-               setParent(_Val);\r
-            m_list.insert(m_fence,_Val);\r
-            m_vector.push_back(_Val);\r
-           }\r
-\r
-        iterator erase(iterator _Where) {\r
-            removeParent(*_Where);\r
-            removeChild(*_Where);\r
-            return m_vector.erase(_Where.m_iter);\r
-        }\r
-\r
-        iterator erase(iterator _First, iterator _Last) {\r
-            for (iterator i=_First; i!=_Last; i++) {\r
-                removeParent(*i);\r
-                removeChild(*i);\r
-            }\r
-            return m_vector.erase(_First,_Last);\r
-        }\r
-\r
-    private:\r
-        void setParent(const_reference _Val) {\r
-            if (_Val->getParent())\r
-                throw XMLObjectException("Child object already has a parent.");\r
-            _Val->setParent(m_parent);\r
-            DOMCachingXMLObject* dc=dynamic_cast<DOMCachingXMLObject*>(_Val);\r
-            if (dc) {\r
-                dc->releaseParentDOM(true);\r
-            }\r
-        }\r
-\r
-        void removeParent(const_reference _Val) {\r
-            if (_Val->getParent()!=m_parent)\r
-                throw XMLObjectException("Child object not owned by this parent.");\r
-            _Val->setParent(NULL);\r
-            DOMCachingXMLObject* dc=dynamic_cast<DOMCachingXMLObject*>(m_parent);\r
-            if (dc) {\r
-                dc->releaseParentDOM(true);\r
-            }\r
-        }\r
-\r
-        void removeChild(const_reference _Val) {\r
-            for (typename std::list<_Ty*>::iterator i=m_list.begin(); i!=m_list.end(); i++) {\r
-                if ((*i)==_Val) {\r
-                    m_list.erase(i);\r
-                    delete _Val;\r
-                    return;\r
-                }\r
-            }\r
-        }\r
-    };\r
-\r
-};\r
-\r
-#endif /* __xmltooling_list_h__ */\r
+/*
+ *  Copyright 2001-2006 Internet2
+ * 
+ * Licensed 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.
+ */
+
+/**
+ * @file XMLObjectChildrenList.h
+ * 
+ * STL-compatible container wrapper
+ */
+
+#if !defined(__xmltooling_list_h__)
+#define __xmltooling_list_h__
+
+#include <xmltooling/DOMCachingXMLObject.h>
+#include <xmltooling/exceptions.h>
+
+#define ListOf(type) xmltooling::XMLObjectChildrenList<type>
+
+namespace xmltooling {
+
+    // Forward reference
+    template <class _Tx, class _Ty=XMLObject> class XMLObjectChildrenList;
+
+    /**
+     * STL iterator that mediates access to an iterator over typed XML children.
+     * @param _Ty   a bidrectional sequence of the subtype to iterate over
+     */
+    template <class _Ty>
+    class XMLObjectChildrenIterator
+    {
+        typename _Ty::iterator m_iter;
+        template <class _Tx, class _Tz> friend class XMLObjectChildrenList;
+    public:
+        typedef typename _Ty::iterator::iterator_category iterator_category;
+        typedef typename _Ty::iterator::value_type value_type;
+        typedef typename _Ty::iterator::reference reference;
+        typedef typename _Ty::iterator::pointer pointer;
+        typedef typename _Ty::const_iterator::reference const_reference;
+        typedef typename _Ty::const_iterator::pointer const_pointer;
+        typedef typename _Ty::iterator::difference_type difference_type;
+
+        XMLObjectChildrenIterator() {
+        }
+
+        XMLObjectChildrenIterator(typename _Ty::iterator iter) {
+            m_iter=iter;
+        }
+
+        const_reference operator*() const {
+            return *m_iter;
+        }
+
+        pointer operator->() const {
+            return (&**this);
+        }
+
+        XMLObjectChildrenIterator& operator++() {
+            // preincrement
+            ++m_iter;
+            return (*this);
+        }
+
+        XMLObjectChildrenIterator& operator--() {
+            // predecrement
+            --m_iter;
+            return (*this);
+        }
+
+        XMLObjectChildrenIterator operator++(int) {
+            // postincrement
+            XMLObjectChildrenIterator _Tmp = *this;
+            ++*this;
+            return (_Tmp);
+        }
+
+        XMLObjectChildrenIterator operator--(int) {
+            // postdecrement
+            XMLObjectChildrenIterator _Tmp = *this;
+            --*this;
+            return (_Tmp);
+        }
+
+        XMLObjectChildrenIterator& operator+=(difference_type _Off) {
+            // increment by integer
+            m_iter += _Off;
+            return (*this);
+        }
+
+        XMLObjectChildrenIterator operator+(difference_type _Off) const {
+            // return this + integer
+            XMLObjectChildrenIterator _Tmp = *this;
+            return (_Tmp += _Off);
+        }
+
+        XMLObjectChildrenIterator& operator-=(difference_type _Off) {
+            // decrement by integer
+            return (*this += -_Off);
+        }
+
+        XMLObjectChildrenIterator operator-(difference_type _Off) const {
+            // return this - integer
+            XMLObjectChildrenIterator _Tmp = *this;
+            return (_Tmp -= _Off);
+        }
+
+        difference_type operator-(const XMLObjectChildrenIterator& _Right) const {
+            // return difference of iterators
+            return m_iter - _Right.m_iter;
+        }
+
+        const_reference operator[](difference_type _Off) const {
+            // subscript
+            return (*(*this + _Off));
+        }
+
+        bool operator==(const XMLObjectChildrenIterator &_Right) const {
+                   // test for iterator equality
+                   return (m_iter == _Right.m_iter);
+           }
+
+           bool operator!=(const XMLObjectChildrenIterator &_Right) const {
+                   // test for iterator inequality
+                   return (!(m_iter == _Right.m_iter));
+           }
+    };
+
+    /**
+     * STL-compatible container that mediates access to underlying lists of typed XML children.
+     * @param _Tx   the subtype to expose a container over
+     * @param _Ty   the base type in the underlying list (defaults to XMLObject)
+     */
+    template <class _Tx, class _Ty>
+    class XMLObjectChildrenList
+    {
+        typedef typename std::vector<_Tx*> container;
+        typename XMLObjectChildrenList::container& m_vector;
+        typename std::list<_Ty*>& m_list;
+        typename std::list<_Ty*>::iterator m_fence;
+        XMLObject* m_parent;
+
+       public:
+        typedef typename container::value_type value_type;
+        typedef typename container::reference reference;
+        typedef typename container::const_reference const_reference;
+        typedef typename container::difference_type difference_type;
+        typedef typename container::size_type size_type;
+
+        // We override the iterator types with our constrained wrapper.
+        typedef XMLObjectChildrenIterator<typename XMLObjectChildrenList::container> iterator;
+        typedef const XMLObjectChildrenIterator<typename XMLObjectChildrenList::container> const_iterator;
+
+        /**
+         * Constructor to expose a typed collection of children backed by a list of a base type.
+         *
+         * @param parent    parent object of the collection
+         * @param v         underlying vector of iterators that reference the children
+         * @param backing   backing list for children
+         * @param ins_fence a marker designating where new children of this type should be added
+         */
+        XMLObjectChildrenList(
+            XMLObject* parent,
+            typename XMLObjectChildrenList::container& v,
+            typename std::list<_Ty*>& backing,
+            typename std::list<_Ty*>::iterator ins_fence
+            ) : m_parent(parent), m_vector(v), m_list(backing), m_fence(ins_fence) {
+        }
+
+        size_type size() const {
+            // return length of sequence
+            return m_vector.size();
+        }
+
+        bool empty() const {
+            // test if sequence is empty
+            return m_vector.empty();
+        }
+
+        iterator begin() {
+            // return iterator for beginning of mutable sequence
+            return m_vector.begin();
+        }
+
+        iterator end() {
+            // return iterator for end of mutable sequence
+            return m_vector.end();
+        }
+
+        const_iterator begin() const {
+            // return iterator for beginning of const sequence
+            return m_vector.begin();
+        }
+
+        const_iterator end() const {
+            // return iterator for end of const sequence
+            return m_vector.end();
+        }
+
+        const_reference at(size_type _Pos) const {
+            // subscript nonmutable sequence with checking
+            return m_vector.at(_Pos);
+        }
+
+        const_reference operator[](size_type _Pos) const {
+            // subscript nonmutable sequence
+            return m_vector[_Pos];
+        }
+
+        const_reference front() const {
+            // return first element of nonmutable sequence
+            return (*begin());
+        }
+
+        const_reference back() const {
+            // return last element of nonmutable sequence
+            return *(m_vector.back());
+        }
+
+        void push_back(const_reference _Val) {
+            setParent(_Val);
+            m_list.insert(m_fence,_Val);
+            m_vector.push_back(_Val);
+        }
+
+        iterator erase(iterator _Where) {
+            removeParent(*_Where);
+            removeChild(*_Where);
+            return m_vector.erase(_Where.m_iter);
+        }
+
+        iterator erase(iterator _First, iterator _Last) {
+            for (iterator i=_First; i!=_Last; i++) {
+                removeParent(*i);
+                removeChild(*i);
+            }
+            return m_vector.erase(_First,_Last);
+        }
+
+    private:
+        void setParent(const_reference _Val) {
+            if (_Val->getParent())
+                throw XMLObjectException("Child object already has a parent.");
+            _Val->setParent(m_parent);
+            DOMCachingXMLObject* dc=dynamic_cast<DOMCachingXMLObject*>(_Val);
+            if (dc) {
+                dc->releaseParentDOM(true);
+            }
+        }
+
+        void removeParent(const_reference _Val) {
+            if (_Val->getParent()!=m_parent)
+                throw XMLObjectException("Child object not owned by this parent.");
+            _Val->setParent(NULL);
+            DOMCachingXMLObject* dc=dynamic_cast<DOMCachingXMLObject*>(m_parent);
+            if (dc) {
+                dc->releaseParentDOM(true);
+            }
+        }
+
+        void removeChild(const_reference _Val) {
+            for (typename std::list<_Ty*>::iterator i=m_list.begin(); i!=m_list.end(); i++) {
+                if ((*i)==_Val) {
+                    m_list.erase(i);
+                    delete _Val;
+                    return;
+                }
+            }
+        }
+    };
+
+};
+
+#endif /* __xmltooling_list_h__ */