private function generateIteratorElements()
    {
        if ($this->subject === '') {
            $this->iteratorCache->append(new TextIteratorElement(self::DONE, -1));
            return;
        }

        if ($this->iteratorType === self::CODE_POINT) {
            throw new UnsupportedFeatureException('Unsupported iterator type.', 1210849150);
        } elseif ($this->iteratorType === self::COMB_SEQUENCE) {
            throw new UnsupportedFeatureException('Unsupported iterator type.', 1210849151);
        } elseif ($this->iteratorType === self::CHARACTER) {
            $this->parseSubjectByCharacter();
        } elseif ($this->iteratorType === self::WORD) {
            $this->parseSubjectByWord();
        } elseif ($this->iteratorType === self::LINE) {
            $this->parseSubjectByLine();
        } elseif ($this->iteratorType === self::SENTENCE) {
            $this->parseSubjectBySentence();
        }

        $this->iteratorCache->append(new TextIteratorElement(self::DONE, -1));
        $this->iteratorCacheIterator = $this->iteratorCache->getIterator();
    }