code: @Override
      public boolean hasNext() {
  
          resetToLastKey();
  
          if (mIsFirst) {
              mIsFirst = false;
              try {
  
                  AtomicValue mItem1 = null;
                  if (mOperand1 instanceof LiteralExpr) {
                      mItem1 = ((LiteralExpr)mOperand1).evaluate();
                  } else if (mOperand1.hasNext()) {
                      // atomize operand
                      mItem1 = atomize(mOperand1);
  
                  }
  
                  if (mItem1 != null) {
  
                      AtomicValue mItem2 = null;
                      if (mOperand2 instanceof LiteralExpr) {
                          mItem2 = ((LiteralExpr)mOperand2).evaluate();
                      } else if (mOperand2.hasNext()) {
                          // atomize operand
                          mItem2 = atomize(mOperand2);
                      }
  
                      if (mItem2 != null) {
                          final AtomicValue result = operate(mItem1, mItem2);
                          // add retrieved AtomicValue to item list
                          final int itemKey = getItemList().addItem(result);
                          moveTo(itemKey);
                          return true;
  
                      }
                  }
              } catch (TTXPathException e) {
                  throw new RuntimeException(e);
              }
          }
          // either not the first call, or empty sequence
          resetToStartKey();
          return false;
  
      }
docs: {@inheritDoc}