Proyectos de Subversion Moodle

Rev

Rev 1 | | Comparar con el anterior | 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',
1441 ariadna 26
                value: ($originalSize === null ? 0 : 8) +
1 efrain 27
                    ($compressedSize === null ? 0 : 8) +
28
                    ($relativeHeaderOffset === null ? 0 : 8) +
29
                    ($diskStartNumber === null ? 0 : 4)
30
            ),
31
            ...($originalSize === null ? [] : [
32
                new PackField(format: 'P', value: $originalSize),
33
            ]),
34
            ...($compressedSize === null ? [] : [
35
                new PackField(format: 'P', value: $compressedSize),
36
            ]),
37
            ...($relativeHeaderOffset === null ? [] : [
38
                new PackField(format: 'P', value: $relativeHeaderOffset),
39
            ]),
40
            ...($diskStartNumber === null ? [] : [
41
                new PackField(format: 'V', value: $diskStartNumber),
42
            ]),
43
        );
44
    }
45
}