code: void advance()
          {
              // we are always at the leaf level when this method is invoked
              // so we calculate the seed for generating the row by combining the seed that generated the clustering components
              int depth = clusteringComponents.length - 1;
              long parentSeed = clusteringSeeds[depth];
              long rowSeed = seed(clusteringComponents[depth].peek(), generator.clusteringComponents.get(depth).type, parentSeed);
  
              // and then fill the row with the _non-clustering_ values for the position we _were_ at, as this is what we'll deliver
              for (int i = clusteringSeeds.length ; i < row.row.length ; i++)
              {
                  Generator gen = generator.valueComponents.get(i - clusteringSeeds.length);
                  gen.setSeed(rowSeed);
                  row.row[i] = gen.generate();
              }
  
              // then we advance the leaf level
              setHasNext(advance(depth, false));
          }
docs: to move the iterator to the next item