/** * @static * @throws phpMorphy_Exception * @param phpMorphy_Storage_StorageInterface $storage * @param bool $isLazy * @return phpMorphy_Fsa_FsaInterface */ static function create(phpMorphy_Storage_StorageInterface $storage, $isLazy) { if ($isLazy) { return new phpMorphy_Fsa_Proxy($storage); } $header = phpMorphy_Fsa_FsaAbstract::readHeader($storage->read(0, self::HEADER_SIZE, true)); if (!phpMorphy_Fsa_FsaAbstract::validateHeader($header)) { throw new phpMorphy_Exception('Invalid fsa format'); } if ($header['flags']['is_sparse']) { $type = 'sparse'; } else { if ($header['flags']['is_tree']) { $type = 'tree'; } else { throw new phpMorphy_Exception('Only sparse or tree fsa`s supported'); } } $storage_type = $storage->getTypeAsString(); $file_path = __DIR__ . "/access/fsa_{$type}_{$storage_type}.php"; $clazz = 'phpMorphy_Fsa_' . ucfirst($type) . '_' . ucfirst($storage_type); return new $clazz($storage->getResource(), $header); }
protected function createFsa(phpMorphy_Storage_StorageInterface $storage, $lazy) { return phpMorphy_Fsa_FsaAbstract::create($storage, $lazy); }
protected function proxyInstantiate() { $result = phpMorphy_Fsa_FsaAbstract::create($this->storage, false); unset($this->storage); return $result; }