From e4950e51f2ccf29a36e85bc51b1e04452c4f33dc Mon Sep 17 00:00:00 2001 From: Kunal Mehta Date: Wed, 28 Jan 2015 20:59:50 -0800 Subject: [PATCH] Move ExplodeIterator into includes/libs/ Change-Id: Ibb3b36dbce223454b9cd485743d7e7845f729bfb --- autoload.php | 2 +- includes/libs/ExplodeIterator.php | 116 ++++++++++++++++++++++++++++++ includes/utils/StringUtils.php | 97 ------------------------- 3 files changed, 117 insertions(+), 98 deletions(-) create mode 100644 includes/libs/ExplodeIterator.php diff --git a/autoload.php b/autoload.php index 5d382b2d30..dc9ef1977a 100644 --- a/autoload.php +++ b/autoload.php @@ -372,7 +372,7 @@ $wgAutoloadLocalClasses = array( 'ErrorPageError' => __DIR__ . '/includes/exception/ErrorPageError.php', 'Exif' => __DIR__ . '/includes/media/Exif.php', 'ExifBitmapHandler' => __DIR__ . '/includes/media/ExifBitmap.php', - 'ExplodeIterator' => __DIR__ . '/includes/utils/StringUtils.php', + 'ExplodeIterator' => __DIR__ . '/includes/libs/ExplodeIterator.php', 'ExportProgressFilter' => __DIR__ . '/maintenance/backup.inc', 'ExtensionLanguages' => __DIR__ . '/maintenance/language/languages.inc', 'ExtensionProcessor' => __DIR__ . '/includes/registration/ExtensionProcessor.php', diff --git a/includes/libs/ExplodeIterator.php b/includes/libs/ExplodeIterator.php new file mode 100644 index 0000000000..64e33a471c --- /dev/null +++ b/includes/libs/ExplodeIterator.php @@ -0,0 +1,116 @@ +subject = $subject; + $this->delim = $delim; + + // Micro-optimisation (theoretical) + $this->subjectLength = strlen( $subject ); + $this->delimLength = strlen( $delim ); + + $this->rewind(); + } + + function rewind() { + $this->curPos = 0; + $this->endPos = strpos( $this->subject, $this->delim ); + $this->refreshCurrent(); + } + + function refreshCurrent() { + if ( $this->curPos === false ) { + $this->current = false; + } elseif ( $this->curPos >= $this->subjectLength ) { + $this->current = ''; + } elseif ( $this->endPos === false ) { + $this->current = substr( $this->subject, $this->curPos ); + } else { + $this->current = substr( $this->subject, $this->curPos, $this->endPos - $this->curPos ); + } + } + + function current() { + return $this->current; + } + + /** + * @return int|bool Current position or boolean false if invalid + */ + function key() { + return $this->curPos; + } + + /** + * @return string + */ + function next() { + if ( $this->endPos === false ) { + $this->curPos = false; + } else { + $this->curPos = $this->endPos + $this->delimLength; + if ( $this->curPos >= $this->subjectLength ) { + $this->endPos = false; + } else { + $this->endPos = strpos( $this->subject, $this->delim, $this->curPos ); + } + } + $this->refreshCurrent(); + + return $this->current; + } + + /** + * @return bool + */ + function valid() { + return $this->curPos !== false; + } +} diff --git a/includes/utils/StringUtils.php b/includes/utils/StringUtils.php index a07e03f02b..3f2def2745 100644 --- a/includes/utils/StringUtils.php +++ b/includes/utils/StringUtils.php @@ -421,100 +421,3 @@ class ReplacementArray { return $result; } } - -/** - * An iterator which works exactly like: - * - * foreach ( explode( $delim, $s ) as $element ) { - * ... - * } - * - * Except it doesn't use 193 byte per element - */ -class ExplodeIterator implements Iterator { - // The subject string - private $subject, $subjectLength; - - // The delimiter - private $delim, $delimLength; - - // The position of the start of the line - private $curPos; - - // The position after the end of the next delimiter - private $endPos; - - // The current token - private $current; - - /** - * Construct a DelimIterator - * @param string $delim - * @param string $subject - */ - function __construct( $delim, $subject ) { - $this->subject = $subject; - $this->delim = $delim; - - // Micro-optimisation (theoretical) - $this->subjectLength = strlen( $subject ); - $this->delimLength = strlen( $delim ); - - $this->rewind(); - } - - function rewind() { - $this->curPos = 0; - $this->endPos = strpos( $this->subject, $this->delim ); - $this->refreshCurrent(); - } - - function refreshCurrent() { - if ( $this->curPos === false ) { - $this->current = false; - } elseif ( $this->curPos >= $this->subjectLength ) { - $this->current = ''; - } elseif ( $this->endPos === false ) { - $this->current = substr( $this->subject, $this->curPos ); - } else { - $this->current = substr( $this->subject, $this->curPos, $this->endPos - $this->curPos ); - } - } - - function current() { - return $this->current; - } - - /** - * @return int|bool Current position or boolean false if invalid - */ - function key() { - return $this->curPos; - } - - /** - * @return string - */ - function next() { - if ( $this->endPos === false ) { - $this->curPos = false; - } else { - $this->curPos = $this->endPos + $this->delimLength; - if ( $this->curPos >= $this->subjectLength ) { - $this->endPos = false; - } else { - $this->endPos = strpos( $this->subject, $this->delim, $this->curPos ); - } - } - $this->refreshCurrent(); - - return $this->current; - } - - /** - * @return bool - */ - function valid() { - return $this->curPos !== false; - } -} -- 2.20.1