1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
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_SET_CONTEXT
7 #define __TX_XPATH_SET_CONTEXT
8 
9 #include "txIXPathContext.h"
10 #include "txNodeSet.h"
11 
12 class txNodeSetContext : public txIEvalContext {
13  public:
txNodeSetContext(txNodeSet * aContextNodeSet,txIMatchContext * aContext)14   txNodeSetContext(txNodeSet* aContextNodeSet, txIMatchContext* aContext)
15       : mContextSet(aContextNodeSet), mPosition(0), mInner(aContext) {}
16 
17   // Iteration over the given NodeSet
hasNext()18   bool hasNext() { return mPosition < size(); }
next()19   void next() {
20     NS_ASSERTION(mPosition < size(), "Out of bounds.");
21     mPosition++;
22   }
setPosition(uint32_t aPosition)23   void setPosition(uint32_t aPosition) {
24     NS_ASSERTION(aPosition > 0 && aPosition <= size(), "Out of bounds.");
25     mPosition = aPosition;
26   }
27 
28   TX_DECL_EVAL_CONTEXT;
29 
30  protected:
31   RefPtr<txNodeSet> mContextSet;
32   uint32_t mPosition;
33   txIMatchContext* mInner;
34 };
35 
36 #endif  // __TX_XPATH_SET_CONTEXT
37