code: protected function createIntersections() {
      $totalNumberOfCombinations = min(pow(2, $this->arraysSize), $this->maxNumberOfCombinations);
      $maskGenerator = new BitMaskGenerator($this->arraysSize, 2);
      $i = 0;
      $noresult = 0;
      while ($i < $totalNumberOfCombinations && $noresult < $totalNumberOfCombinations && $mask = $maskGenerator->getNextMask()) {
        if (!$this->isNoResultMask($mask)) {
          $i++;
          $this->generateIntersection($mask);
          continue;
        }
        $noresult++;
      }
  
      if (!is_null($this->intersections)) {
        uasort($this->intersections, function ($a, $b) {
          return count($b) - count($a);
        });
      }
    }
docs: Create all intersections given the constructor parameters.