code: @Nonnull
    @ReturnsMutableCopy
    public ICommonsList <DATATYPE> next ()
    {
      if (!hasNext ())
        throw new NoSuchElementException ();
  
      // Not for the very first item, as the first item is the original order
      final boolean bFirstItem = m_bUseLong ? m_nCombinationsLeft == m_nTotalCombinations
                                            : m_aCombinationsLeft.equals (m_aTotalCombinations);
      if (!bFirstItem)
      {
        final int nElementCount = m_aElements.length;
        final int nSlotCount = m_aIndexResult.length;
  
        int i = nSlotCount - 1;
        while (m_aIndexResult[i] == (nElementCount - nSlotCount + i))
        {
          i--;
        }
        m_aIndexResult[i]++;
        final int nIndexResultI = m_aIndexResult[i];
        for (int j = i + 1; j < nSlotCount; j++)
        {
          m_aIndexResult[j] = nIndexResultI + j - i;
        }
      }
  
      // One combination less
      if (m_bUseLong)
        m_nCombinationsLeft--;
      else
        m_aCombinationsLeft = m_aCombinationsLeft.subtract (BigInteger.ONE);
  
      // Build result list
      final ICommonsList <DATATYPE> aResult = new CommonsArrayList <> (m_aIndexResult.length);
      for (final int nIndex : m_aIndexResult)
        aResult.add (m_aElements[nIndex]);
      return aResult;
    }
docs: Generate next combination (algorithm from Rosen p. 286)
  
  @return the next combination as list of the size specified for slots filled
  with elements from the original list