Completed
Pull Request — develop (#27)
by Chris
12:16
created

AbstractParentCore   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 16
lcom 1
cbo 2
dl 0
loc 60
c 0
b 0
f 0
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
C parse() 0 30 11
A dump() 0 15 4
shouldParseNextLine() 0 1 ?
getCores() 0 1 ?
A moveToNextLine() 0 6 1
1
<?php
2
3
namespace Chrisyue\PhpM3u8\M3u8\Core;
4
5
abstract class AbstractParentCore extends AbstractCore
6
{
7
    public function parse()
8
    {
9
        $parsedSequence = -1;
10
        $result = $this->initResult();
11
12
        do {
13
            $lineInfo = $this->getStream()->read();
14
            if (null === $lineInfo) {
15
                continue;
16
            }
17
18
            foreach ($this->getCores() as $property => $parser) {
19
                if ($parser->getSequence() < $parsedSequence || null !== $result->$property && !is_array($result->$property)) {
20
                    continue;
21
                }
22
23
                $childResult = $parser->setStream($this->getStream())->parse();
24
                if (null === $childResult) {
25
                    continue;
26
                }
27
28
                is_array($result->$property) ? $result->$property[] = $childResult : $result->$property = $childResult;
29
                $parsedSequence = $parser->getSequence();
30
31
                break;
32
            }
33
        } while ($this->shouldParseNextLine($result, $parsedSequence) && $this->moveToNextLine());
34
35
        return $parsedSequence > -1 ? $result : null;
36
    }
37
38
    public function dump($result)
39
    {
40
        foreach ($this->getCores() as $property => $dumper) {
41
            $childResult = $result->$property;
42
            if (null === $childResult) {
43
                continue;
44
            }
45
46
            $dumper->setStream($this->getStream());
47
48
            is_array($childResult) ? array_walk($childResult, function ($val) use ($dumper) {
49
                $dumper->dump($val);
50
            }) : $dumper->dump($childResult);
51
        }
52
    }
53
54
    abstract protected function shouldParseNextLine($result, $parsedSequence);
55
56
    abstract protected function getCores();
57
58
    private function moveToNextLine()
59
    {
60
        $this->getStream()->next();
61
62
        return $this->getStream()->valid();
63
    }
64
}
65