public function getCombinations(array $sourceDataSet, $subsetSize = null)
    {
        // If the subset size is supplied, then just return the combinations that match such size
        if (isset($subsetSize)) {
            return $this->_getCombinationSubset($sourceDataSet, $subsetSize);
        }
        
        // Otherwise, we return all possible combinations
        $masterCombinationSet = [];
        
        // Calculate the combinations for all the possible lengths and add them to the master set
        $sourceDataSetLength = count($sourceDataSet);
        for ($i = 1; $i <= $sourceDataSetLength; $i++) {
            $combinationSubset    = $this->_getCombinationSubset($sourceDataSet, $i);
            $masterCombinationSet = array_merge($masterCombinationSet, $combinationSubset);
        }
        
        return $masterCombinationSet;
    }