xml/xmldomandxpath/src/xmlenginedom/xmlengxpathutils.cpp
changeset 0 e35f40988205
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/xmldomandxpath/src/xmlenginedom/xmlengxpathutils.cpp	Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,180 @@
+// 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:
+// XPath utils
+//
+
+#include <xml/dom/xmlengxpathutils.h>
+#include <stdapis/libxml2/libxml2_globals.h>
+#include <stdapis/libxml2/libxml2_xpath.h>
+#include <stdapis/libxml2/libxml2_xpathinternals.h>
+#include "xmlengdomdefs.h"
+#include <xml/dom/xmlengnode.h>
+#include <xml/utils/xmlengmem.h>
+#include <xml/utils/xmlengxestrings.h>
+
+#define XPATH_OBJ (static_cast<xmlXPathObjectPtr>(iInternal))
+
+// ---------------------------------------------------------------------------
+// Converts node to number
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TReal XmlEngXPathUtils::ToNumberL(
+    const TXmlEngNode& aNode )
+    {
+    // construct a fake node set with one node
+    TXmlEngNode node = aNode;
+    xmlNodeSet nset;
+    xmlNodePtr pNode = INTERNAL_NODEPTR(node);
+    nset.nodeNr = 1;
+    nset.nodeMax = 1;
+    nset.nodeTab = &pNode;
+    //
+    TReal number = xmlXPathCastNodeSetToNumber(&nset);
+    TEST_OOM_FLAG;
+    return number;
+    }
+    
+// ---------------------------------------------------------------------------
+// Converts node-set to number
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TReal XmlEngXPathUtils::ToNumberL(
+    const RXmlEngNodeSet& aNodeSet )
+    {
+    TReal number = xmlXPathCastNodeSetToNumber(INTERNAL_NODESETPTR(aNodeSet));
+    TEST_OOM_FLAG;    
+    return number;
+    }
+    
+// ---------------------------------------------------------------------------
+// Converts TBool value to number
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TReal XmlEngXPathUtils::ToNumberL(
+    TBool aValue )
+    {
+    return aValue ? (1.0) :(0.0);
+    }
+    
+// ---------------------------------------------------------------------------
+// Converts string to number
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TReal XmlEngXPathUtils::ToNumberL(
+    const TDesC8& aString )
+    {
+    xmlChar* str = xmlCharFromDesC8L(aString);
+    TReal number = (TReal)xmlXPathStringEvalNumber(str);
+    delete str;
+    TEST_OOM_FLAG;    
+    return number;
+    }
+    
+// ---------------------------------------------------------------------------
+// Converts node to string
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void XmlEngXPathUtils::ToStringL(
+    const TXmlEngNode& aNode, RBuf8& aOutput)
+    {
+    aNode.WholeTextContentsCopyL(aOutput);
+    }
+
+// ---------------------------------------------------------------------------
+// Converts node-set to string
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void XmlEngXPathUtils::ToStringL(
+    const RXmlEngNodeSet& aNodeSet, RBuf8& aOutput)
+    {
+    xmlChar* text= xmlXPathCastNodeSetToString(INTERNAL_NODESETPTR(aNodeSet));
+    OOM_IF_NULL(text);    
+    xmlCharAssignToRbuf8L(aOutput,text);
+    }
+
+// ---------------------------------------------------------------------------
+// Converts TBool value to string
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void XmlEngXPathUtils::ToStringL(
+    TBool aValue, RBuf8& aOutput)
+    {
+    xmlChar* text = xmlStrdup((const xmlChar *)(aValue ? "true" : "false"));
+    OOM_IF_NULL(text);    
+    xmlCharAssignToRbuf8L(aOutput,text);
+    }
+
+// ---------------------------------------------------------------------------
+// Converts TReal value to string
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void XmlEngXPathUtils::ToStringL(
+    TReal aValue, RBuf8& aOutput )
+    {
+    xmlChar* text = xmlXPathCastNumberToString(aValue);
+    OOM_IF_NULL(text);    
+    xmlCharAssignToRbuf8L(aOutput,text);
+    }
+
+// ---------------------------------------------------------------------------
+// Converts node to boolean
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool XmlEngXPathUtils::ToBoolean(
+    const TXmlEngNode& aNode )
+    {
+    return aNode.NotNull();
+    }
+
+// ---------------------------------------------------------------------------
+// Converts node-set to boolean
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool XmlEngXPathUtils::ToBoolean(
+    const RXmlEngNodeSet& aNodeSet )
+    {
+    return xmlXPathCastNodeSetToBoolean(INTERNAL_NODESETPTR(aNodeSet));
+    }
+    
+// ---------------------------------------------------------------------------
+// Converts string to boolean
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool XmlEngXPathUtils::ToBoolean(
+    const TDesC8& aValue )
+    {
+    return aValue.Length() ? 1 : 0;
+    }
+
+// ---------------------------------------------------------------------------
+// Converts stringArg to boolean
+// @deprecated
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool XmlEngXPathUtils::ToBooleanL(
+    const TDesC8& aValue )
+    {
+    return ToBoolean(aValue);
+    }
+
+// ---------------------------------------------------------------------------
+// Converts TReal value to boolean
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool XmlEngXPathUtils::ToBoolean(
+    TReal aValue )
+    {
+    return xmlXPathIsNaN(aValue) || (aValue == 0.0) ?  0 : 1;
+    }
+