Completed
Push — master ( 1e032b...d01fce )
by Nate
02:22
created

AbstractMap   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 72
Duplicated Lines 30.56 %

Coupling/Cohesion

Components 0
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 10
lcom 0
cbo 1
dl 22
loc 72
ccs 18
cts 18
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A putAll() 0 7 2
A putAllArray() 0 7 2
A find() 11 11 3
A exists() 11 11 3

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
/*
3
 * Copyright (c) Nate Brunette.
4
 * Distributed under the MIT License (http://opensource.org/licenses/MIT)
5
 */
6
7
namespace Tebru\Collection;
8
9
/**
10
 * Class AbstractMap
11
 *
12
 * A skeletal implementation of [@see MapInterface]
13
 *
14
 * @author Nate Brunette <[email protected]>
15
 */
16
abstract class AbstractMap implements MapInterface
17
{
18
    /**
19
     * Adds all the mappings from specified map to this map
20
     *
21
     * @param MapInterface $map
22
     * @return void
23
     */
24 1
    public function putAll(MapInterface $map)
25
    {
26
        /** @var MapEntry $entrySet */
27 1
        foreach ($map->entrySet() as $entrySet) {
28 1
            $this->put($entrySet->key, $entrySet->value);
29
        }
30 1
    }
31
32
    /**
33
     * Adds all the mappings from specified array to this map
34
     *
35
     * @param array $map
36
     * @return void
37
     */
38 1
    public function putAllArray(array $map)
39
    {
40
        /** @var MapEntry $entrySet */
41 1
        foreach ($map as $key => $value) {
42 1
            $this->put($key, $value);
43
        }
44 1
    }
45
46
    /**
47
     * Find the first [@see MapEntry] in map
48
     *
49
     * The closure will get passed a MapEntry.  Returning true will end the
50
     * loop and return that MapEntry
51
     *
52
     * @param callable $find
53
     * @return MapEntry|null
54
     */
55 2 View Code Duplication
    public function find(callable $find)
56
    {
57
        /** @var MapEntry $mapEntry */
58 2
        foreach ($this->entrySet() as $mapEntry) {
59 2
            if (true === $find($mapEntry)) {
60 2
                return $mapEntry;
61
            }
62
        }
63
64 1
        return null;
65
    }
66
67
    /**
68
     * Use a closure to determine existence in the map
69
     *
70
     * The closure will get passed a [@see MapEntry].  Returning true from the
71
     * closure will return true from this method.
72
     *
73
     * @param callable $exists
74
     * @return bool
75
     */
76 1 View Code Duplication
    public function exists(callable $exists): bool
77
    {
78
        /** @var MapEntry $mapEntry */
79 1
        foreach ($this->entrySet() as $mapEntry) {
80 1
            if (true === $exists($mapEntry)) {
81 1
                return true;
82
            }
83
        }
84
85 1
        return false;
86
    }
87
}
88