xml/xmldomandxpath/src/xmlenginedom/xmlengxpathevaluationcontext_impl.h
changeset 0 e35f40988205
--- /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 <xml/dom/xmlengxpathevaluationcontext.h>
+#include <libxml2_xpathinternals.h>
+
+/**
+ * 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:<br>
+     *      <b>MinArity()</b>  =<  <i>arg.count</i>  =< <b>MaxArity()</b> 
+     */
+    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 */