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

AbstractHeaderReader   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 88
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 2

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 0 Features 2
Metric Value
wmc 7
c 2
b 0
f 2
lcom 2
cbo 2
dl 0
loc 88
ccs 0
cts 14
cp 0
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A getSynchsafeIntegerFilter() 0 4 1
readSize() 0 1 ?
A getSize() 0 8 2
readFlags() 0 1 ?
A isFlagEnabled() 0 12 3
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