1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef __TX_XPATH_SINGLENODE_CONTEXT 7 #define __TX_XPATH_SINGLENODE_CONTEXT 8 9 #include "mozilla/Attributes.h" 10 #include "txIXPathContext.h" 11 12 class txSingleNodeContext : public txIEvalContext { 13 public: txSingleNodeContext(const txXPathNode & aContextNode,txIMatchContext * aContext)14 txSingleNodeContext(const txXPathNode& aContextNode, 15 txIMatchContext* aContext) 16 : mNode(aContextNode), mInner(aContext) { 17 NS_ASSERTION(aContext, "txIMatchContext must be given"); 18 } 19 getVariable(int32_t aNamespace,nsAtom * aLName,txAExprResult * & aResult)20 nsresult getVariable(int32_t aNamespace, nsAtom* aLName, 21 txAExprResult*& aResult) override { 22 NS_ASSERTION(mInner, "mInner is null!!!"); 23 return mInner->getVariable(aNamespace, aLName, aResult); 24 } 25 isStripSpaceAllowed(const txXPathNode & aNode,bool & aAllowed)26 nsresult isStripSpaceAllowed(const txXPathNode& aNode, 27 bool& aAllowed) override { 28 NS_ASSERTION(mInner, "mInner is null!!!"); 29 return mInner->isStripSpaceAllowed(aNode, aAllowed); 30 } 31 getPrivateContext()32 void* getPrivateContext() override { 33 NS_ASSERTION(mInner, "mInner is null!!!"); 34 return mInner->getPrivateContext(); 35 } 36 recycler()37 txResultRecycler* recycler() override { 38 NS_ASSERTION(mInner, "mInner is null!!!"); 39 return mInner->recycler(); 40 } 41 receiveError(const nsAString & aMsg,nsresult aRes)42 void receiveError(const nsAString& aMsg, nsresult aRes) override { 43 NS_ASSERTION(mInner, "mInner is null!!!"); 44 #ifdef DEBUG 45 nsAutoString error(NS_LITERAL_STRING("forwarded error: ")); 46 error.Append(aMsg); 47 mInner->receiveError(error, aRes); 48 #else 49 mInner->receiveError(aMsg, aRes); 50 #endif 51 } 52 getContextNode()53 const txXPathNode& getContextNode() override { return mNode; } 54 size()55 uint32_t size() override { return 1; } 56 position()57 uint32_t position() override { return 1; } 58 59 private: 60 const txXPathNode& mNode; 61 txIMatchContext* mInner; 62 }; 63 64 #endif // __TX_XPATH_SINGLENODE_CONTEXT 65