Completed
Push — id3-metadata-objects ( 0cc3db...879c59 )
by Daniel
12:29
created

AbstractHeaderReader::getVersion()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
ccs 0
cts 2
cp 0
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 2
1
<?php
2
/**
3
 * This file is part of the Metadata project.
4
 *
5
 * @author Daniel Schröder <[email protected]>
6
 */
7
8
namespace GravityMedia\Metadata\ID3v2\Reader;
9
10
use GravityMedia\Metadata\ID3v2\Filter\SynchsafeIntegerFilter;
11
use GravityMedia\Metadata\ID3v2\Reader;
12
use GravityMedia\Stream\Stream;
13
14
/**
15
 * ID3v2 abstract header reader class.
16
 *
17
 * @package GravityMedia\Metadata\ID3v2\Reader
18
 */
19
abstract class AbstractHeaderReader extends Reader
20
{
21
    /**
22
     * @var SynchsafeIntegerFilter
23
     */
24
    private $synchsafeIntegerFilter;
25
26
    /**
27
     * @var int
28
     */
29
    private $size;
30
31
    /**
32
     * @var bool[]
33
     */
34
    private $flags;
35
36
    /**
37
     * Create ID3v2 abstract header reader object.
38
     *
39
     * @param Stream $stream
40
     * @param int    $version
41
     */
42
    public function __construct(Stream $stream, $version)
43
    {
44
        parent::__construct($stream, $version);
45
46
        $this->synchsafeIntegerFilter = new SynchsafeIntegerFilter();
47
    }
48
49
    /**
50
     * Get synchsafe integer filter
51
     *
52
     * @return SynchsafeIntegerFilter
53
     */
54
    protected function getSynchsafeIntegerFilter()
55
    {
56
        return $this->synchsafeIntegerFilter;
57
    }
58
59
    /**
60
     * Read size.
61
     *
62
     * @return int
63
     */
64
    abstract protected function readSize();
65
66
    /**
67
     * Get size.
68
     *
69
     * @return int
70
     */
71
    public function getSize()
72
    {
73
        if (null === $this->size) {
74
            $this->size = $this->readSize();
75
        }
76
77
        return $this->size;
78
    }
79
80
    /**
81
     * Read flags.
82
     *
83
     * @return bool[]
84
     */
85
    abstract protected function readFlags();
86
87
    /**
88
     * Whether the flag is enabled.
89
     *
90
     * @param int $flag
91
     *
92
     * @return bool
93
     */
94
    public function isFlagEnabled($flag)
95
    {
96
        if (null === $this->flags) {
97
            $this->flags = $this->readFlags();
98
        }
99
100
        if (isset($this->flags[$flag])) {
101
            return $this->flags[$flag];
102
        }
103
104
        return false;
105
    }
106
}
107