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