diff -r e1b950c65cb4 -r 837f303aceeb epoc32/include/xml/dom/xmlengnodelist.h --- a/epoc32/include/xml/dom/xmlengnodelist.h Wed Mar 31 12:27:01 2010 +0100 +++ b/epoc32/include/xml/dom/xmlengnodelist.h Wed Mar 31 12:33:34 2010 +0100 @@ -1,131 +1,114 @@ -/* -* Copyright (c) 2006-2006 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members -* which accompanies this distribution, and is available -* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Node list inline functions -* -*/ - - - - - - - -#ifndef XMLENGINE_NODELIST_H_INCLUDED -#define XMLENGINE_NODELIST_H_INCLUDED - -#include "xmlengnode.h" -#include "xmlengnodelist_impl.h" +// Copyright (c) 2006-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: +// Node list class +// /** - * Template implements list container. - * - * List may contain different types of nodes. - * Node pointer is casted to specify node type when - * is returned by Next() method. - * - * @lib XmlEngineDOM.lib - * @since S60 v3.2 - */ + @file + @publishedAll + @released +*/ +#ifndef XMLENGNODELIST_H +#define XMLENGNODELIST_H + +#include <xml/dom/xmlengnode.h> +#include <xml/dom/xmlengnodelist_impl.h> + +/** +Implements an iterator or filtered iterator for a tree. + +This classes behaves in two very different ways, depending on the +template parameter. + +1) RXmlEngNodeList<TXmlEngNode> + +Through template specialization, this becomes an alias for RXmlEngNodeListImpl. +The RXmlEngNodeListImpl::OpenL() methods control which nodes are included in +the iterator. It is possible to iterate across all node types or only a single +type. It is possible to iterate only over nodes within a specific namespace. +It is also possible to iterate over nodes with the same name. + +RXmlEngNodeListImpl should not be used directly. + +@see RXmlEngNodeListImpl + +2) RXmlEngNodeList<X> where X is not TXmlEngNode + +As the OpenL() methods of this class are private, this class cannot be opened +except by friend classes TXmlEngNode and TXmlEngElement. As such, this form +should not be used. +*/ template<class T> class RXmlEngNodeList { + friend class TXmlEngNode; + friend class TXmlEngElement; + public: /** - * Get list length. - * - * @since S60 v3.2 - * @return Number of nodes in a node list - */ + Gets the list length. + @return The number of nodes in the list + */ inline TInt Count() const; /** - * Checks whether next node exists in a node list - * - * @since S60 v3.2 - * @return TRUE if next node exists, FALSE otherwise - */ + Checks whether a next node exists in the list + @return ETrue of a next node exists, EFalse otherwise + */ inline TBool HasNext() const; /** - * Retrieves next node from a node list - * - * @since S60 v3.2 - * @return Next node - */ + Gets the next node in the list + @return The next node casted to the templated type or NULL if it does not + exist + */ inline T Next(); - /** - * Closes a node list - * - * @since S60 v3.2 - */ + /** + Closes a node list. This does not affect any of the nodes. Only + internally used memory is freed. + */ inline void Close(); private: - friend class TXmlEngNode; - friend class TXmlEngElement; - /* - * Opens node. - * - * @since S60 v3.2 - * @param aHead node pointer to the node from which the searching - of list elements is started - * @param aType type of list elements - * @param aName name of list elements - * @param aNs namespace of list elements - * - * @note If aType is NULL, aName and aNs are ignored - */ - void OpenL( + inline void OpenL( void* aHead, TXmlEngNode::TXmlEngDOMNodeType aType, const TDesC8& aName = KNullDesC8, const TDesC8& aNs = KNullDesC8); - /** - * Opens node. - * - * @since S60 v3.2 - * @param aHead node pointer to the node from which the searching - of list elements is started - * @param aType type of list elements - */ - void Open( + inline void Open( void* aHead, TXmlEngNode::TXmlEngDOMNodeType aType); - /** List with nodes */ +private: RXmlEngNodeListImpl iList; }; /** - * Template implements list container for nodes. - * - * Specialization for trivial case: list of TXmlEngNode objects - * No "thin wrapper" pattern needed, operate directly on NodeListImpl - * - * @lib XmlEngineDOM.lib - * @since S60 v3.1 - */ +This template specialization makes RXmlEngNodeList<TXmlEngNode> an alias for +RXmlEngNodeListImpl. No part of the class specified above is used, rather the +interface (and implementation) of RXmlEngNodeListImpl is used instead. +*/ template<> class RXmlEngNodeList<TXmlEngNode>: public RXmlEngNodeListImpl {}; +#include <xml/dom/xmlengnodelist.inl> -#include "xmlengnodelist.inl" +#endif /* XMLENGNODELIST_H */ -#endif /* XMLENGINE_NODELIST_H_INCLUDED */