xml/xmldomandxpath/src/xmlenginedom/xmlengnodeset.cpp
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/xmldomandxpath/src/xmlenginedom/xmlengnodeset.cpp	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,112 @@
+// Copyright (c) 2005-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 set functions implementation
+//
+
+#include <stdapis/libxml2/libxml2_globals.h>
+#include <stdapis/libxml2/libxml2_xpath.h>
+#include <stdapis/libxml2/libxml2_xpathinternals.h>
+
+#include <xml/dom/xmlengnodeset.h>
+#include <xml/dom/xmlengnode.h>
+#include "xmlengdomdefs.h"
+#include <xml/utils/xmlengmem.h>
+
+#define THIS_NODESET (static_cast<xmlNodeSetPtr>(iInternal))
+// -----------------------------------------------------------------------------
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RXmlEngNodeSet::RXmlEngNodeSet():iInternal(NULL)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Frees any allocated resources for the RXmlEngNodeSet instance.
+//
+// @note All nodes referred to in a node set are "live",
+//       meaning that they are not copies of actual nodes in
+//       a document tree. <br>
+//       <b> The only exception for this are namespace declarations, 
+//       which ARE COPIES AND ARE DESTROYED with a node set</b>
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RXmlEngNodeSet::Free()
+    {
+    // NOTE: namespace nodes are new objects (->next points to parent element)
+    //       and should be destroyed; all other nodes are "live" and belong 
+    //       to the document tree (so, should not be deleted)
+    //       xmlXPathNodeSetFreeNs(xmlNsPtr ns) is used for namespaces
+    if (!THIS_NODESET)
+        return;  // nothing to free..
+    xmlXPathFreeNodeSet(THIS_NODESET);
+    iInternal = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// @return Number of nodes in a node set
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt RXmlEngNodeSet::Length() const
+    {
+    return THIS_NODESET ? THIS_NODESET->nodeNr : 0;
+    }
+
+// -----------------------------------------------------------------------------
+// Retrieves a node from node set by index
+//
+// @param aIndex  Node index  { 0 <= aIndex < Length() } 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TXmlEngNode RXmlEngNodeSet::operator[](
+    TInt aIndex) const
+    {
+    XE_ASSERT_DEBUG(THIS_NODESET && aIndex >= 0 && aIndex < THIS_NODESET->nodeNr);
+    return TXmlEngNode(THIS_NODESET->nodeTab[aIndex]);
+    }
+
+// -----------------------------------------------------------------------------
+// Checks whether aNode is in a resulting node set
+//
+// @return TRUE is node in the node set, FALSE otherwise
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool RXmlEngNodeSet::Contains(
+    TXmlEngNode aNode) const
+    {
+    return xmlXPathNodeSetContains(THIS_NODESET, INTERNAL_NODEPTR(aNode));
+    }
+
+// -----------------------------------------------------------------------------
+// Initializes a RXmlEngNodeSet instance as being "empty"
+//
+// This method is used when preparing node sets that will
+// be used with RXmlEngXPathExpression::EvaluateWithDependenciesL(TXmlEngNode,RXmlEngNodeSet&)
+// and TXmlEngXPathEvaluator::EvaluateWithDependenciesL(aExpression,aContextNode,aResolver,aDependents)
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RXmlEngNodeSet::InitializeL()
+    {
+    Free();
+    // create the libxml nodeset "object"
+    iInternal = xmlXPathNodeSetCreate(NULL);
+    OOM_IF_NULL(iInternal);
+    }
+// -----------------------------------------------------------------------------
+// Constructor
+// -----------------------------------------------------------------------------
+//
+RXmlEngNodeSet::RXmlEngNodeSet(void* aData):iInternal(aData)
+    {
+    }