diff -r 000000000000 -r e35f40988205 xml/xmldomandxpath/src/xmlenginedom/xmlengxpathutils.cpp --- /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 +#include +#include +#include +#include "xmlengdomdefs.h" +#include +#include +#include + +#define XPATH_OBJ (static_cast(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; + } +