HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers84/zuiderbos.nl/vendor/nqxcode/phpmorphy/src/phpMorphy/Storage/Factory.php
<?php
/*
* This file is part of phpMorphy project
*
* Copyright (c) 2007-2012 Kamaev Vladimir <heromantor@users.sourceforge.net>
*
*     This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
*     This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
*     You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/

class phpMorphy_Storage_Factory {
    const STORAGE_FILE = 'file';
    const STORAGE_MEM = 'mem';
    const STORAGE_SHM = 'shm';

    protected
        /** @var phpMorphy_Shm_CacheInterface */
        $shm_cache,
        /** @var array */
        $shm_options;

    /**
     * @param array $shmOptions
     */
    function __construct($shmOptions = array()) {
        $this->shm_options = $shmOptions;
    }

    /**
     * @return phpMorphy_Shm_CacheInterface
     */
    function getShmCache() {
        if(!isset($this->shm_cache)) {
            $this->shm_cache = $this->createShmCache($this->shm_options);
        }

        return $this->shm_cache;
    }

    /**
     * @throws phpMorphy_Exception
     * @param string|int $type One of STORAGE_FILE, STORAGE_MEM, STORAGE_SHM constants from phpMorphy_Storage_Factory
     * @param string $fileName
     * @param bool $isLazy
     * @return phpMorphy_Storage_File|phpMorphy_Storage_Mem|phpMorphy_Storage_Proxy|phpMorphy_Storage_Shm
     */
    function create($type, $fileName, $isLazy) {
        if(!$this->isTypeSupported($type)) {
            throw new phpMorphy_Exception("Invalid storage type $type specified");
        }

        if($isLazy) {
            return new phpMorphy_Storage_Proxy($type, $fileName, $this);
        }

        switch($type) {
            case self::STORAGE_FILE:
                return new phpMorphy_Storage_File($fileName);
            case self::STORAGE_MEM:
                return new phpMorphy_Storage_Mem($fileName);
            case self::STORAGE_SHM:
                return new phpMorphy_Storage_Shm($fileName, $this->getShmCache());
            default:
                throw new phpMorphy_Exception("Invalid storage type $type specified");
        }
    }

    /**
     * @param array $options
     * @return phpMorphy_Shm_CacheInterface
     */
    protected function createShmCache($options) {
        return new phpMorphy_Shm_Cache($options, !empty($options['clear_on_create']));
    }

    /**
     * @param string|int $type
     * @return bool
     */
    protected function isTypeSupported($type) {
        return in_array(
            $type,
            array(
                self::STORAGE_FILE,
                self::STORAGE_MEM,
                self::STORAGE_SHM,
            )
        );
    }
}