uncompress(); $hash = md5( $text ); if ( !isset( $this->mItems[$hash] ) ) { $this->mItems[$hash] = $text; $this->mSize += strlen( $text ); } return $hash; } /** * @param string $hash * @return array|bool */ public function getItem( $hash ) { $this->uncompress(); if ( array_key_exists( $hash, $this->mItems ) ) { return $this->mItems[$hash]; } else { return false; } } /** * @param string $text * @return void */ public function setText( $text ) { $this->uncompress(); $this->mDefaultHash = $this->addItem( $text ); } /** * @return array|bool */ public function getText() { $this->uncompress(); return $this->getItem( $this->mDefaultHash ); } /** * Remove an item * * @param string $hash */ public function removeItem( $hash ) { $this->mSize -= strlen( $this->mItems[$hash] ); unset( $this->mItems[$hash] ); } /** * Compress the bulk data in the object */ public function compress() { if ( !$this->mCompressed ) { $this->mItems = gzdeflate( serialize( $this->mItems ) ); $this->mCompressed = true; } } /** * Uncompress bulk data */ public function uncompress() { if ( $this->mCompressed ) { $this->mItems = unserialize( gzinflate( $this->mItems ) ); $this->mCompressed = false; } } /** * @return array */ function __sleep() { $this->compress(); return [ 'mVersion', 'mCompressed', 'mItems', 'mDefaultHash' ]; } function __wakeup() { $this->uncompress(); } /** * Helper function for compression jobs * Returns true until the object is "full" and ready to be committed * * @return bool */ public function isHappy() { return $this->mSize < $this->mMaxSize && count( $this->mItems ) < $this->mMaxCount; } } // phpcs:ignore Generic.CodeAnalysis.UnconditionalIfStatement.Found if ( false ) { // Blobs generated by MediaWiki < 1.5 on PHP 4 were serialized with the // class name coerced to lowercase. We can improve efficiency by adding // autoload entries for the lowercase variants of these classes (T166759). // The code below is never executed, but it is picked up by the AutoloadGenerator // parser, which scans for class_alias() calls. // @phan-suppress-next-line PhanRedefineClassAlias class_alias( ConcatenatedGzipHistoryBlob::class, 'concatenatedgziphistoryblob' ); }