Completed
Push — id3-metadata-objects ( 168cf3...e37014 )
by Daniel
08:47
created

AbstractHandler::getSize()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

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