HEX
Server: Apache/2.4.41 (Amazon) OpenSSL/1.0.2k-fips PHP/5.6.40
System: Linux ip-172-31-40-18 4.14.146-93.123.amzn1.x86_64 #1 SMP Tue Sep 24 00:45:23 UTC 2019 x86_64
User: apache (48)
PHP: 5.6.40
Disabled: NONE
Upload Files
File: /var/www/html/punjabcabs/vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest/Arrays/MatchingOnce.php
<?php
namespace Hamcrest\Arrays;

/*
 Copyright (c) 2009 hamcrest.org
 */

use Hamcrest\Description;

class MatchingOnce
{

    private $_elementMatchers;
    private $_mismatchDescription;

    public function __construct(array $elementMatchers, Description $mismatchDescription)
    {
        $this->_elementMatchers = $elementMatchers;
        $this->_mismatchDescription = $mismatchDescription;
    }

    public function matches($item)
    {
        return $this->_isNotSurplus($item) && $this->_isMatched($item);
    }

    public function isFinished($items)
    {
        if (empty($this->_elementMatchers)) {
            return true;
        }

        $this->_mismatchDescription
                 ->appendText('No item matches: ')->appendList('', ', ', '', $this->_elementMatchers)
                 ->appendText(' in ')->appendValueList('[', ', ', ']', $items)
                 ;

        return false;
    }

    // -- Private Methods

    private function _isNotSurplus($item)
    {
        if (empty($this->_elementMatchers)) {
            $this->_mismatchDescription->appendText('Not matched: ')->appendValue($item);

            return false;
        }

        return true;
    }

    private function _isMatched($item)
    {
            /** @var $matcher \Hamcrest\Matcher */
        foreach ($this->_elementMatchers as $i => $matcher) {
            if ($matcher->matches($item)) {
                unset($this->_elementMatchers[$i]);

                return true;
            }
        }

        $this->_mismatchDescription->appendText('Not matched: ')->appendValue($item);

        return false;
    }
}