diff -r 000000000000 -r e35f40988205 xml/xmldomandxpath/src/xmlenginedom/xmlengxpathevaluationcontext_impl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/xmldomandxpath/src/xmlenginedom/xmlengxpathevaluationcontext_impl.h Thu Dec 17 09:29:21 2009 +0200 @@ -0,0 +1,160 @@ +// 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: +// XPath evaluation context declaration +// + + + +/** + @file + @internalComponent + @released +*/ +#ifndef XMLENGXPATHEVALCTXT_IMPL_H +#define XMLENGXPATHEVALCTXT_IMPL_H + +#include +#include + +/** + * XPath evaluation context + * + */ +class TXmlEngXPathEvaluationContextImpl: public MXmlEngXPathEvaluationContext + { +public: + /** + * Constructor + * + * @param aContext Pointer to XPath parser context + * @param aArgCount Number of arguments + */ + TXmlEngXPathEvaluationContextImpl(xmlXPathParserContextPtr aContext, TUint aArgCount) + : iContext(aContext), + iArgCount(aArgCount), + iCurrentResult(NULL), + iOOM(EFalse) {} + + /** + * Get number of arguments provided + * + * @return Number of arguments provided + * + * @note + * The implementation of extension function should not check + * that ArgCount() returns value in the range [ MinArity() ; MaxArity() ] + * - the function is called iif the statement holds:
+ * MinArity() =< arg.count =< MaxArity() + */ + TUint ArgCount(); + + /** + * Retrieves arguments by index (zero-based) + * + * @return N-th argument of the function + * + * @note + * - Argument index starts at 0 + * - Returned result should not be freed + */ + const RXmlEngXPathResult Argument(TUint aIndex); + + /** + * Get the result written so far. + * + * @return Result evaluated by the function so far. + * + * Initially, function result is undefined. It can be changed + * by SetResult() functions for a boolean, string or number values + * or by combined use of InitializeNodeSetResult() and AppendToResult() methods + */ + const RXmlEngXPathResult Result(); + + /** + * Sets a NODESET type of the result (floating-point number): an empty + * instance of NodeSet is created. + * + * The node set is to be filled up by methods AppendToResult(TXmlEngNode) and AppendToResult(RXmlEngNodeSet) + * This method replaces any existing prepared result so far + * (even an initialized already node set) + * @see AppendToResult(TXmlEngNode), AppendToResult(RXmlEngNodeSet) + * + */ + void InitializeNodeSetResult(); + + /** + * Appends a node to the node set result. + * @note InitializeNodeSetResult() should be called prior any call to + * AppendToResult(TXmlEngNode) or AppendToResult(RXmlEngNodeSet) + * + * @param aNode Node that should be add + */ + void AppendToResult(const TXmlEngNode aNode); + void AppendToResult(const TXmlEngNamespace aAppendedNsNode, const TXmlEngElement aNsParentNode); + /** + * Appends a node set to the node set result. Nodes are merged into resulting node set. + * @note InitializeNodeSetResult() should be called prior any call to + * AppendToResult(TXmlEngNode) or AppendToResult(RXmlEngNodeSet) + * + * @param aNodeSet Nodes that should be add + */ + void AppendToResult(const RXmlEngNodeSet aNodeSet); + + /** + * Sets a NUMBER type of the result (a floating-point number) + * + * @param aNumber New number + */ + void SetResult(TReal aNumber); + + /** + * Sets a BOOLEAN type of the result + * + * @param aBoolean New value + */ + void SetResult(TBool aBoolean); + + /** + * Sets a STRING type of the result + * + * @param aString New string value + */ + void SetResultL(const TDesC8& aString); + + /** + * Gets data specified in RXmlEngXPathExpression::SetExtendedContext(void*) method + * for the expression currently being evaluated. + * + */ + void* ExtendedContext(); + + /** + * Allocates memory for function result + * + * @return TRUE is succeeded, FALSE if OOM has happened + */ + TBool Initialize(); + +private: + /** XPath parser */ + xmlXPathParserContextPtr iContext; + /** Arguments count */ + TUint iArgCount; + /** XPath object */ + xmlXPathObjectPtr iCurrentResult; + /** OOM flag */ + TBool iOOM; + }; + +#endif /* XMLENGXPATHEVALCTXT_IMPL_H */