Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
0 / 0
100.00% covered (success)
100.00%
0 / 0
CRAP
100.00% covered (success)
100.00%
0 / 0
<?php
/**
 * This file is part of the Hephaistos project management API.
 * 
 * As each files provides by the CSCFA, this file is licensed
 * under the MIT license.
 *
 * PHP version 5.6
 *
 * @category Interface
 * @package  Hephaistos
 * @author   matthieu vallance <matthieu.vallance@cscfa.fr>
 * @license  MIT <https://opensource.org/licenses/MIT>
 * @link     http://cscfa.fr
 */
namespace CSDT\CollectionsBundle\CollectionHelper\HelperInterface;
use CSDT\CollectionsBundle\CollectionInterfaces\CollectionInterface;
/**
 * Collection helper interface
 *
 * This interface define the methods
 * of the collection helper.
 *
 * @category Interface
 * @package  Hephaistos
 * @author   matthieu vallance <matthieu.vallance@cscfa.fr>
 * @license  MIT <https://opensource.org/licenses/MIT>
 * @link     http://cscfa.fr
 */
interface CollectionHelperInterface
{
    
    /**
     * Set caster manager
     * 
     * This method store a ArrayCasterManager
     * instance to allow the processing of the
     * array.
     * 
     * @param ArrayCasterManagerInterface $manager The manager to store
     * 
     * @return CollectionHelperInterface
     */
    public function setCasterManager(ArrayCasterManagerInterface $manager);
    
    /**
     * Array to collection
     * 
     * This method inject an array into specific collection type.
     * 
     * @param array  $source          The array source to inject
     * @param string $collectionClass The collection class name
     * 
     * @return CollectionInterface
     */
    public function arrayToCollection(array $source, $collectionClass);
    
    /**
     * Merge collection
     * 
     * Return a collection of the same type as
     * $collection1 with all the content of the
     * second collection. Note a data lost is
     * possible by example if you merge a
     * ValueCollection as $collection1 and a
     * MapCollection as $collection2.
     * 
     * @param CollectionInterface $collection1 The first collection
     * @param CollectionInterface $collection2 The second collection
     * 
     * @return CollectionInterface
     */
    public function mergeCollections(
        CollectionInterface $collection1, 
        CollectionInterface $collection2
    );
    
    /**
     * Merge array
     * 
     * Return a collectino of the same type as
     * $collection with the content of the
     * array. Note a data lost is possible by
     * example if you merge a ValueCollection
     * as $collection and an associative array
     * as $array.
     * 
     * @param CollectionInterface $collection The collection
     * @param array               $array      The array to merge
     * 
     * @return CollectionInterface
     */
    public function mergeArray(
        CollectionInterface $collection,
        array $array
    );
    
    /**
     * Sub collection
     * 
     * Return a Collection that contain a part
     * of the $collection starting at an integer
     * index and for the given length. Th content
     * will be truncated if the length is superior
     * of the real collection length. Note you are
     * able to use it with a map collection.
     * 
     * @param CollectionInterface $collection The collection where find the content
     * @param number              $start      The start index
     * @param integer             $length     The length of the result collection
     *                                        content
     * 
     * @return CollectionInterface
     */
    public function subCollection(
        CollectionInterface $collection,
        $start = 0,
        $length = null
    );
    
    /**
     * Sub map
     * 
     * Return a Collection that contain a part
     * of the $collection corresponding to the
     * to the given $keys. Note you are able to
     * use it with any collection.
     * 
     * @param CollectionInterface $collection The collection where
     *                                        find the content
     * @param array               $keys       The keys to return
     * 
     * @return CollectionInterface
     */
    public function subMap(
        CollectionInterface $collection,
        array $keys
    );
    
    /**
     * Walk collection
     * 
     * Apply a closure foreach elements of a collection.
     * It send to the closure the value as first argument
     * and the index as second one.
     * 
     * @param CollectionInterface $collection The collection to walk
     * @param \Closure            $closure    The closure to apply
     * @param array               $args       [optional] The array of argument to
     *                                        send as third argument
     *                               
     * @return void
     */
    public function walkCollection(
        CollectionInterface $collection,
        \Closure $closure,
        array $args = null
    );
    
}