xml/xmldomandxpath/src/xmlenginedom/xmlengxpathresult.cpp
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/xmldomandxpath/src/xmlenginedom/xmlengxpathresult.cpp	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,129 @@
+// 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:
+// Result of XPath expression
+//
+
+#include <xml/dom/xmlengxpathresult.h>
+#include <stdapis/libxml2/libxml2_globals.h>
+#include <stdapis/libxml2/libxml2_xpath.h>
+#include "xmlengdomdefs.h"
+#include <xml/utils/xmlengmem.h>
+#include <xml/utils/xmlengxestrings.h>
+
+#define RESULT_OBJ (static_cast<xmlXPathObjectPtr>(iInternal))
+
+// -----------------------------------------------------------------------------
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RXmlEngXPathResult::RXmlEngXPathResult():iInternal(NULL)
+	{
+	}
+
+// ---------------------------------------------------------------------------
+// Frees any allocated memory by this instance
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RXmlEngXPathResult::Free()
+    {
+	xmlXPathFreeObject(RESULT_OBJ);
+    }
+
+// ---------------------------------------------------------------------------
+// Retrieves type of result
+// @note Always check  type of result before use it
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RXmlEngXPathResult::TXmlEngXPathResultType RXmlEngXPathResult::Type() const
+    {
+	return (TXmlEngXPathResultType)RESULT_OBJ->type;
+    }
+
+// ---------------------------------------------------------------------------
+// Retrieves node-set result.
+// Non-RXmlEngNodeSet result will return NULL. No conversion is done from other 
+// types.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RXmlEngNodeSet RXmlEngXPathResult::AsNodeSet() const
+    {
+	return RXmlEngNodeSet(RESULT_OBJ->nodesetval);	
+    }
+
+// ---------------------------------------------------------------------------
+// Retrieves copy of result as TXmlEngParserString. 
+// In this version of API this method will make conversion from other types of 
+// XPath result. In the future release there will be separate method for 
+// conversion (this method will return TDOMString and conversion method - 
+// TString)
+// NOTE: Returns a pointer to the copy of the string, the caller must free it
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void RXmlEngXPathResult::AsStringL(RBuf8& aOutput) const
+    {
+    xmlChar* copy = NULL;
+    if (RESULT_OBJ->type == XPATH_STRING)
+        {
+        if(RESULT_OBJ->stringval)
+            {
+            copy = xmlStrdup(RESULT_OBJ->stringval);
+            OOM_IF_NULL(copy);
+        	}
+        }
+    else
+        {
+        copy = xmlXPathCastToString(RESULT_OBJ);
+        if(OOM_FLAG)
+            {
+            if(copy)
+                xmlFree(copy);
+            OOM_HAPPENED;
+            }
+        }
+    xmlCharAssignToRbuf8L(aOutput,copy);
+    }
+
+// ---------------------------------------------------------------------------
+// Retrieves numeric value of the result.
+// Conversion occurs as XPath spec says if the result is not of ENumber type
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TReal RXmlEngXPathResult::AsNumber() const
+    {
+	if (RESULT_OBJ->type == XPATH_NUMBER)
+		return RESULT_OBJ->floatval;
+	else
+		return xmlXPathCastToNumber(RESULT_OBJ);
+    }
+
+// ---------------------------------------------------------------------------
+// Retrieves numeric value of the result.
+// Conversion occurs as XPath spec says if the result is not of EBoolean type
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool RXmlEngXPathResult::AsBoolean() const
+	{
+	if (RESULT_OBJ->type == XPATH_BOOLEAN)
+		return RESULT_OBJ->boolval;
+	else
+		return xmlXPathCastToBoolean(RESULT_OBJ);
+	}
+
+// -----------------------------------------------------------------------------
+// Constructor 
+// -----------------------------------------------------------------------------
+//
+RXmlEngXPathResult::RXmlEngXPathResult(void* aData):iInternal(aData)
+	{
+	}