Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace ZipStream\Zip64;
6
 
7
use ZipStream\PackField;
8
 
9
/**
10
 * @internal
11
 */
12
abstract class ExtendedInformationExtraField
13
{
14
    private const TAG = 0x0001;
15
 
16
    public static function generate(
17
        ?int $originalSize = null,
18
        ?int $compressedSize = null,
19
        ?int $relativeHeaderOffset = null,
20
        ?int $diskStartNumber = null,
21
    ): string {
22
        return PackField::pack(
23
            new PackField(format: 'v', value: self::TAG),
24
            new PackField(
25
                format: 'v',
26
                value:
27
                    ($originalSize === null ? 0 : 8) +
28
                    ($compressedSize === null ? 0 : 8) +
29
                    ($relativeHeaderOffset === null ? 0 : 8) +
30
                    ($diskStartNumber === null ? 0 : 4)
31
            ),
32
            ...($originalSize === null ? [] : [
33
                new PackField(format: 'P', value: $originalSize),
34
            ]),
35
            ...($compressedSize === null ? [] : [
36
                new PackField(format: 'P', value: $compressedSize),
37
            ]),
38
            ...($relativeHeaderOffset === null ? [] : [
39
                new PackField(format: 'P', value: $relativeHeaderOffset),
40
            ]),
41
            ...($diskStartNumber === null ? [] : [
42
                new PackField(format: 'V', value: $diskStartNumber),
43
            ]),
44
        );
45
    }
46
}