Convert PackageStructure constants to enum cases

This commit is contained in:
netkas 2024-09-14 00:19:53 -04:00
parent c687d0394d
commit 321fef4228
3 changed files with 48 additions and 48 deletions

View file

@ -168,7 +168,7 @@
throw new IOException(sprintf('File \'%s\' is not a valid package file (corrupted header)', $file_path), $e); throw new IOException(sprintf('File \'%s\' is not a valid package file (corrupted header)', $file_path), $e);
} }
if(!isset($this->headers[PackageStructure::FILE_VERSION])) if(!isset($this->headers[PackageStructure::FILE_VERSION->value]))
{ {
throw new IOException(sprintf('File \'%s\' is not a valid package file (invalid header)', $file_path)); throw new IOException(sprintf('File \'%s\' is not a valid package file (invalid header)', $file_path));
} }
@ -213,7 +213,7 @@
*/ */
public function getFileVersion(): string public function getFileVersion(): string
{ {
return $this->headers[PackageStructure::FILE_VERSION]; return $this->headers[PackageStructure::FILE_VERSION->value];
} }
/** /**
@ -223,7 +223,7 @@
*/ */
public function getFlags(): array public function getFlags(): array
{ {
return $this->headers[PackageStructure::FLAGS]; return $this->headers[PackageStructure::FLAGS->value];
} }
/** /**
@ -234,7 +234,7 @@
*/ */
public function getFlag(string $name): bool public function getFlag(string $name): bool
{ {
return in_array($name, $this->headers[PackageStructure::FLAGS], true); return in_array($name, $this->headers[PackageStructure::FLAGS->value], true);
} }
/** /**
@ -244,7 +244,7 @@
*/ */
public function getDirectory(): array public function getDirectory(): array
{ {
return $this->headers[PackageStructure::DIRECTORY]; return $this->headers[PackageStructure::DIRECTORY->value];
} }
/** /**
@ -255,15 +255,15 @@
*/ */
public function get(string $name): string public function get(string $name): string
{ {
if(!isset($this->headers[PackageStructure::DIRECTORY][$name])) if(!isset($this->headers[PackageStructure::DIRECTORY->value][$name]))
{ {
throw new RuntimeException(sprintf('File \'%s\' not found in package', $name)); throw new RuntimeException(sprintf('File \'%s\' not found in package', $name));
} }
$location = explode(':', $this->headers[PackageStructure::DIRECTORY][$name]); $location = explode(':', $this->headers[PackageStructure::DIRECTORY->value][$name]);
fseek($this->package_file, ($this->data_offset + (int)$location[0])); fseek($this->package_file, ($this->data_offset + (int)$location[0]));
if(in_array(PackageFlags::COMPRESSION, $this->headers[PackageStructure::FLAGS], true)) if(in_array(PackageFlags::COMPRESSION, $this->headers[PackageStructure::FLAGS->value], true))
{ {
return gzuncompress(fread($this->package_file, (int)$location[1])); return gzuncompress(fread($this->package_file, (int)$location[1]));
} }
@ -279,12 +279,12 @@
*/ */
public function getPointer(string $name): array public function getPointer(string $name): array
{ {
if(!isset($this->headers[PackageStructure::DIRECTORY][$name])) if(!isset($this->headers[PackageStructure::DIRECTORY->value[$name]]))
{ {
throw new RuntimeException(sprintf('Resource \'%s\' not found in package', $name)); throw new RuntimeException(sprintf('Resource \'%s\' not found in package', $name));
} }
$location = explode(':', $this->headers[PackageStructure::DIRECTORY][$name]); $location = explode(':', $this->headers[PackageStructure::DIRECTORY->value[$name]]);
return [(int)$location[0], (int)$location[1]]; return [(int)$location[0], (int)$location[1]];
} }
@ -296,7 +296,7 @@
*/ */
public function exists(string $name): bool public function exists(string $name): bool
{ {
return isset($this->headers[PackageStructure::DIRECTORY][$name]); return isset($this->headers[PackageStructure::DIRECTORY->value[$name]]);
} }
/** /**
@ -327,7 +327,7 @@
return $this->cache[$directory]; return $this->cache[$directory];
} }
if(!isset($this->headers[PackageStructure::DIRECTORY][$directory])) if(!isset($this->headers[PackageStructure::DIRECTORY->value[$directory]]))
{ {
throw new ConfigurationException('Package does not contain an assembly'); throw new ConfigurationException('Package does not contain an assembly');
} }
@ -353,7 +353,7 @@
return $this->cache[$directory]; return $this->cache[$directory];
} }
if(!isset($this->headers[PackageStructure::DIRECTORY][$directory])) if(!isset($this->headers[PackageStructure::DIRECTORY->value[$directory]]))
{ {
throw new ConfigurationException('Package does not contain metadata'); throw new ConfigurationException('Package does not contain metadata');
} }
@ -382,7 +382,7 @@
return $this->cache[$directory]; return $this->cache[$directory];
} }
if(!isset($this->headers[PackageStructure::DIRECTORY][$directory])) if(!isset($this->headers[PackageStructure::DIRECTORY->value[$directory]]))
{ {
return null; return null;
} }
@ -402,7 +402,7 @@
$dependencies = []; $dependencies = [];
$directory = sprintf('@%s:', PackageDirectory::DEPENDENCIES); $directory = sprintf('@%s:', PackageDirectory::DEPENDENCIES);
foreach($this->headers[PackageStructure::DIRECTORY] as $name => $location) foreach($this->headers[PackageStructure::DIRECTORY->value] as $name => $location)
{ {
if(str_starts_with($name, $directory)) if(str_starts_with($name, $directory))
{ {
@ -423,7 +423,7 @@
public function getDependency(string $name): Dependency public function getDependency(string $name): Dependency
{ {
$dependency_name = sprintf('@%s:%s', PackageDirectory::DEPENDENCIES, $name); $dependency_name = sprintf('@%s:%s', PackageDirectory::DEPENDENCIES, $name);
if(!isset($this->headers[PackageStructure::DIRECTORY][$dependency_name])) if(!isset($this->headers[PackageStructure::DIRECTORY->value[$dependency_name]]))
{ {
throw new ConfigurationException(sprintf('Dependency \'%s\' not found in package', $name)); throw new ConfigurationException(sprintf('Dependency \'%s\' not found in package', $name));
} }
@ -454,7 +454,7 @@
$execution_units = []; $execution_units = [];
$directory = sprintf('@%s:', PackageDirectory::EXECUTION_UNITS); $directory = sprintf('@%s:', PackageDirectory::EXECUTION_UNITS);
foreach($this->headers[PackageStructure::DIRECTORY] as $name => $location) foreach($this->headers[PackageStructure::DIRECTORY->value] as $name => $location)
{ {
if(str_starts_with($name, $directory)) if(str_starts_with($name, $directory))
{ {
@ -475,7 +475,7 @@
public function getExecutionUnit(string $name): ExecutionUnit public function getExecutionUnit(string $name): ExecutionUnit
{ {
$execution_unit_name = sprintf('@%s:%s', PackageDirectory::EXECUTION_UNITS, $name); $execution_unit_name = sprintf('@%s:%s', PackageDirectory::EXECUTION_UNITS, $name);
if(!isset($this->headers[PackageStructure::DIRECTORY][$execution_unit_name])) if(!isset($this->headers[PackageStructure::DIRECTORY->value[$execution_unit_name]]))
{ {
throw new ConfigurationException(sprintf('Execution unit \'%s\' not found in package', $name)); throw new ConfigurationException(sprintf('Execution unit \'%s\' not found in package', $name));
} }
@ -506,7 +506,7 @@
$components = []; $components = [];
$directory = sprintf('@%s:', PackageDirectory::COMPONENTS); $directory = sprintf('@%s:', PackageDirectory::COMPONENTS);
foreach($this->headers[PackageStructure::DIRECTORY] as $name => $location) foreach($this->headers[PackageStructure::DIRECTORY->value] as $name => $location)
{ {
if(str_starts_with($name, $directory)) if(str_starts_with($name, $directory))
{ {
@ -527,7 +527,7 @@
$class_map = []; $class_map = [];
$directory = sprintf('@%s:', PackageDirectory::CLASS_POINTER); $directory = sprintf('@%s:', PackageDirectory::CLASS_POINTER);
foreach($this->headers[PackageStructure::DIRECTORY] as $name => $location) foreach($this->headers[PackageStructure::DIRECTORY->value] as $name => $location)
{ {
if(str_starts_with($name, $directory)) if(str_starts_with($name, $directory))
{ {
@ -548,7 +548,7 @@
public function getComponent(string $name): Component public function getComponent(string $name): Component
{ {
$component_name = sprintf('@%s:%s', PackageDirectory::COMPONENTS, $name); $component_name = sprintf('@%s:%s', PackageDirectory::COMPONENTS, $name);
if(!isset($this->headers[PackageStructure::DIRECTORY][$component_name])) if(!isset($this->headers[PackageStructure::DIRECTORY->value][$component_name]))
{ {
throw new ConfigurationException(sprintf('Component \'%s\' not found in package', $name)); throw new ConfigurationException(sprintf('Component \'%s\' not found in package', $name));
} }
@ -579,7 +579,7 @@
public function getComponentByClass(string $class): Component public function getComponentByClass(string $class): Component
{ {
$class_name = sprintf('@%s:%s', PackageDirectory::CLASS_POINTER, $class); $class_name = sprintf('@%s:%s', PackageDirectory::CLASS_POINTER, $class);
if(!isset($this->headers[PackageStructure::DIRECTORY][$class_name])) if(!isset($this->headers[PackageStructure::DIRECTORY->value[$class_name]]))
{ {
throw new ConfigurationException(sprintf('Class map \'%s\' not found in package', $class)); throw new ConfigurationException(sprintf('Class map \'%s\' not found in package', $class));
} }
@ -597,7 +597,7 @@
$resources = []; $resources = [];
$directory = sprintf('@%s:', PackageDirectory::RESOURCES); $directory = sprintf('@%s:', PackageDirectory::RESOURCES);
foreach($this->headers[PackageStructure::DIRECTORY] as $name => $location) foreach($this->headers[PackageStructure::DIRECTORY->value] as $name => $location)
{ {
if(str_starts_with($name, $directory)) if(str_starts_with($name, $directory))
{ {
@ -618,7 +618,7 @@
public function getResource(string $name): Resource public function getResource(string $name): Resource
{ {
$resource_name = sprintf('@%s:%s', PackageDirectory::RESOURCES, $name); $resource_name = sprintf('@%s:%s', PackageDirectory::RESOURCES, $name);
if(!isset($this->headers[PackageStructure::DIRECTORY][$resource_name])) if(!isset($this->headers[PackageStructure::DIRECTORY->value[$resource_name]]))
{ {
throw new ConfigurationException(sprintf('Resource \'%s\' not found in package', $name)); throw new ConfigurationException(sprintf('Resource \'%s\' not found in package', $name));
} }
@ -647,7 +647,7 @@
*/ */
public function find(string $filename): string|false public function find(string $filename): string|false
{ {
foreach($this->headers[PackageStructure::DIRECTORY] as $name => $location) foreach($this->headers[PackageStructure::DIRECTORY->value] as $name => $location)
{ {
if(str_ends_with($name, $filename)) if(str_ends_with($name, $filename))
{ {

View file

@ -108,9 +108,9 @@
$this->temp_file = @fopen($this->temporary_path, 'wb'); // Create a temporary data file $this->temp_file = @fopen($this->temporary_path, 'wb'); // Create a temporary data file
$this->package_file = @fopen($file_path, 'wb'); $this->package_file = @fopen($file_path, 'wb');
$this->headers = [ $this->headers = [
PackageStructure::FILE_VERSION => PackageStructureVersions::_2_0->value, PackageStructure::FILE_VERSION->value => PackageStructureVersions::_2_0->value,
PackageStructure::FLAGS => [], PackageStructure::FLAGS->value => [],
PackageStructure::DIRECTORY => [] PackageStructure::DIRECTORY->value => []
]; ];
if($this->temp_file === false || $this->package_file === false) if($this->temp_file === false || $this->package_file === false)
@ -126,7 +126,7 @@
*/ */
public function getFileVersion(): string public function getFileVersion(): string
{ {
return (string)$this->headers[PackageStructure::FILE_VERSION]; return (string)$this->headers[PackageStructure::FILE_VERSION->value];
} }
/** /**
@ -137,7 +137,7 @@
*/ */
public function setFileVersion(string $version): void public function setFileVersion(string $version): void
{ {
$this->headers[PackageStructure::FILE_VERSION] = $version; $this->headers[PackageStructure::FILE_VERSION->value] = $version;
} }
/** /**
@ -147,7 +147,7 @@
*/ */
public function getFlags(): array public function getFlags(): array
{ {
return (array)$this->headers[PackageStructure::FLAGS]; return (array)$this->headers[PackageStructure::FLAGS->value];
} }
/** /**
@ -164,7 +164,7 @@
throw new IOException('Cannot set flags after data has been written to the package'); throw new IOException('Cannot set flags after data has been written to the package');
} }
$this->headers[PackageStructure::FLAGS] = $flags; $this->headers[PackageStructure::FLAGS->value] = $flags;
} }
/** /**
@ -181,9 +181,9 @@
throw new IOException('Cannot add a flag after data has been written to the package'); throw new IOException('Cannot add a flag after data has been written to the package');
} }
if(!in_array($flag, $this->headers[PackageStructure::FLAGS], true)) if(!in_array($flag, $this->headers[PackageStructure::FLAGS->value], true))
{ {
$this->headers[PackageStructure::FLAGS][] = $flag; $this->headers[PackageStructure::FLAGS->value][] = $flag;
} }
} }
@ -201,7 +201,7 @@
throw new IOException('Cannot remove a flag after data has been written to the package'); throw new IOException('Cannot remove a flag after data has been written to the package');
} }
$this->headers[PackageStructure::FLAGS] = array_diff($this->headers[PackageStructure::FLAGS], [$flag]); $this->headers[PackageStructure::FLAGS->value] = array_diff($this->headers[PackageStructure::FLAGS->value], [$flag]);
} }
/** /**
@ -213,22 +213,22 @@
*/ */
public function add(string $name, string $data): array public function add(string $name, string $data): array
{ {
if(isset($this->headers[PackageStructure::DIRECTORY][$name])) if(isset($this->headers[PackageStructure::DIRECTORY->value][$name]))
{ {
return explode(':', $this->headers[PackageStructure::DIRECTORY][$name]); return explode(':', $this->headers[PackageStructure::DIRECTORY->value][$name]);
} }
if(in_array(PackageFlags::COMPRESSION, $this->headers[PackageStructure::FLAGS], true)) if(in_array(PackageFlags::COMPRESSION, $this->headers[PackageStructure::FLAGS->value], true))
{ {
if(in_array(PackageFlags::LOW_COMPRESSION, $this->headers[PackageStructure::FLAGS], true)) if(in_array(PackageFlags::LOW_COMPRESSION, $this->headers[PackageStructure::FLAGS->value], true))
{ {
$data = gzcompress($data, 1); $data = gzcompress($data, 1);
} }
else if(in_array(PackageFlags::MEDIUM_COMPRESSION, $this->headers[PackageStructure::FLAGS], true)) else if(in_array(PackageFlags::MEDIUM_COMPRESSION, $this->headers[PackageStructure::FLAGS->value], true))
{ {
$data = gzcompress($data, 6); $data = gzcompress($data, 6);
} }
else if(in_array(PackageFlags::HIGH_COMPRESSION, $this->headers[PackageStructure::FLAGS], true)) else if(in_array(PackageFlags::HIGH_COMPRESSION, $this->headers[PackageStructure::FLAGS->value], true))
{ {
$data = gzcompress($data, 9); $data = gzcompress($data, 9);
} }
@ -239,7 +239,7 @@
} }
$pointer = sprintf("%d:%d", ftell($this->temp_file), strlen($data)); $pointer = sprintf("%d:%d", ftell($this->temp_file), strlen($data));
$this->headers[PackageStructure::DIRECTORY][$name] = $pointer; $this->headers[PackageStructure::DIRECTORY->value][$name] = $pointer;
$this->data_written = true; $this->data_written = true;
fwrite($this->temp_file, $data); fwrite($this->temp_file, $data);
@ -256,12 +256,12 @@
*/ */
public function addPointer(string $name, int $offset, int $length): void public function addPointer(string $name, int $offset, int $length): void
{ {
if(isset($this->headers[PackageStructure::DIRECTORY][$name])) if(isset($this->headers[PackageStructure::DIRECTORY->value][$name]))
{ {
return; return;
} }
$this->headers[PackageStructure::DIRECTORY][$name] = sprintf("%d:%d", $offset, $length); $this->headers[PackageStructure::DIRECTORY->value][$name] = sprintf("%d:%d", $offset, $length);
} }
/** /**

View file

@ -22,11 +22,11 @@
namespace ncc\Enums; namespace ncc\Enums;
final class PackageStructure enum PackageStructure : int
{ {
public const FILE_VERSION = 0x73746669; case FILE_VERSION = 0x73746669;
public const FLAGS = 0x73736166; case FLAGS = 0x73736166;
public const DIRECTORY = 0x6f746365; case DIRECTORY = 0x6f746365;
} }