| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | <?phpdeclare(strict_types=1);namespace ZipStream;class DeflateStream extends Stream{    protected $filter;    /**     * @var Option\File     */    protected $options;    /**     * Rewind stream     *     * @return void     */    public function rewind(): void    {        // deflate filter needs to be removed before rewind        if ($this->filter) {            $this->removeDeflateFilter();            $this->seek(0);            $this->addDeflateFilter($this->options);        } else {            rewind($this->stream);        }    }    /**     * Remove the deflate filter     *     * @return void     */    public function removeDeflateFilter(): void    {        if (!$this->filter) {            return;        }        stream_filter_remove($this->filter);        $this->filter = null;    }    /**     * Add a deflate filter     *     * @param Option\File $options     * @return void     */    public function addDeflateFilter(Option\File $options): void    {        $this->options = $options;        // parameter 4 for stream_filter_append expects array        // so we convert the option object in an array        $optionsArr = [            'comment' => $options->getComment(),            'method' => $options->getMethod(),            'deflateLevel' => $options->getDeflateLevel(),            'time' => $options->getTime()        ];        $this->filter = stream_filter_append(            $this->stream,            'zlib.deflate',            STREAM_FILTER_READ,            $optionsArr        );    }}
 |