Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
25.00% covered (danger)
25.00%
6 / 24
50.00% covered (danger)
50.00%
3 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
SegmentList
25.00% covered (danger)
25.00%
6 / 24
50.00% covered (danger)
50.00%
3 / 6
62.05
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getSegments
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setSegments
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 findFirstItemByHash
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
3
 toArray
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
12
 indexOf
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace MediaWiki\Wikispeech\Segment;
4
5/**
6 * @file
7 * @ingroup Extensions
8 * @license GPL-2.0-or-later
9 */
10
11/**
12 * A list of {@link Segment} returned by {@link Segmenter::segmentPage()}
13 * combined with consumer helper functions.
14 *
15 * @since 0.1.10
16 */
17class SegmentList {
18
19    /** @var Segment[] */
20    private $segments;
21
22    /**
23     * @since 0.1.10
24     * @param Segment[] $items
25     */
26    public function __construct( array $items ) {
27        $this->segments = $items;
28    }
29
30    /**
31     * @since 0.1.10
32     * @return Segment[]
33     */
34    public function getSegments(): array {
35        return $this->segments;
36    }
37
38    /**
39     * @since 0.1.10
40     * @param Segment[] $segments
41     */
42    public function setSegments( array $segments ): void {
43        $this->segments = $segments;
44    }
45
46    /**
47     * @since 0.1.10
48     * @param string $hash
49     * @return Segment|null
50     */
51    public function findFirstItemByHash( string $hash ) {
52        foreach ( $this->getSegments() as $segment ) {
53            if ( $segment->getHash() === $hash ) {
54                return $segment;
55            }
56        }
57        return null;
58    }
59
60    /**
61     * @since 0.1.10
62     * @return array An array with segments as associative array
63     */
64    public function toArray(): array {
65        $serializedSegments = [];
66        foreach ( $this->getSegments() as $segment ) {
67            $serializedSegment = [
68                'content' => [],
69                'startOffset' => $segment->getStartOffset(),
70                'endOffset' => $segment->getEndOffset(),
71                'hash' => $segment->getHash()
72            ];
73            foreach ( $segment->getContent() as $content ) {
74                $serializedSegment['content'][] = [
75                    'string' => $content->getString(),
76                    'path' => $content->getPath()
77                ];
78            }
79            $serializedSegments[] = $serializedSegment;
80        }
81        return $serializedSegments;
82    }
83
84    /**
85     * @since 0.1.10
86     * @param Segment $segment
87     * @return int Index of $segment in this SegmentList. -1 if not existing.
88     */
89    public function indexOf( Segment $segment ): int {
90        $index = array_search( $segment, $this->getSegments(), true );
91        return $index === false ? -1 : $index;
92    }
93
94}