UnpackCollection.php

Namespace

Drupal\Composer\Plugin\RecipeUnpack

File

composer/Plugin/RecipeUnpack/UnpackCollection.php

View source
<?php

namespace Drupal\Composer\Plugin\RecipeUnpack;

use Composer\Package\PackageInterface;

/**
 * A collection with packages to unpack.
 *
 * @internal
 */
final class UnpackCollection implements \Iterator, \Countable {
    
    /**
     * The queue of packages to unpack.
     *
     * @var \Composer\Package\PackageInterface[]
     */
    private array $packagesToUnpack = [];
    
    /**
     * The list of packages that have been unpacked.
     *
     * @var array<string, \Composer\Package\PackageInterface>
     */
    private array $unpackedPackages = [];
    
    /**
     * {@inheritdoc}
     */
    public function rewind() : void {
        reset($this->packagesToUnpack);
    }
    
    /**
     * {@inheritdoc}
     */
    public function current() : PackageInterface|false {
        return current($this->packagesToUnpack);
    }
    
    /**
     * {@inheritdoc}
     */
    public function key() : ?string {
        return key($this->packagesToUnpack);
    }
    
    /**
     * {@inheritdoc}
     */
    public function next() : void {
        next($this->packagesToUnpack);
    }
    
    /**
     * {@inheritdoc}
     */
    public function valid() : bool {
        return current($this->packagesToUnpack) !== FALSE;
    }
    
    /**
     * {@inheritdoc}
     */
    public function count() : int {
        return count($this->packagesToUnpack);
    }
    
    /**
     * Adds a package to the queue of packages to unpack.
     *
     * @param \Composer\Package\PackageInterface $package
     *   The package to add to the queue.
     */
    public function add(PackageInterface $package) : self {
        $this->packagesToUnpack[$package->getUniqueName()] = $package;
        return $this;
    }
    
    /**
     * Marks a package as unpacked.
     *
     * @param \Composer\Package\PackageInterface $package
     *   The package that has been unpacked.
     */
    public function markPackageUnpacked(PackageInterface $package) : void {
        $this->unpackedPackages[$package->getUniqueName()] = $package;
    }
    
    /**
     * Checks if a package has been unpacked, or it's queued for unpacking.
     *
     * @param \Composer\Package\PackageInterface $package
     *   The package to check.
     *
     * @return bool
     *   TRUE if the package has been unpacked.
     */
    public function isUnpacked(PackageInterface $package) : bool {
        return isset($this->unpackedPackages[$package->getUniqueName()]);
    }

}

Classes

Title Deprecated Summary
UnpackCollection A collection with packages to unpack.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.