     1: <?php
     2: /**
     3:  * Copyright 2012-2014 Rackspace US, Inc.
     4:  *
     5:  * Licensed under the Apache License, Version 2.0 (the "License");
     6:  * you may not use this file except in compliance with the License.
     7:  * You may obtain a copy of the License at
     8:  *
     9:  * http://www.apache.org/licenses/LICENSE-2.0
    10:  *
    11:  * Unless required by applicable law or agreed to in writing, software
    12:  * distributed under the License is distributed on an "AS IS" BASIS,
    13:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14:  * See the License for the specific language governing permissions and
    15:  * limitations under the License.
    16:  */
    17:
    18: namespace OpenCloud\Common\Collection;
    19:
    20: use Countable;
    21: use OpenCloud\Common\ArrayAccess;
    22:
    23: /**
    24:  * A generic, abstract collection class that allows collections to exhibit array functionality.
    25:  *
    26:  * @package OpenCloud\Common\Collection
    27:  */
    28: abstract class ArrayCollection extends ArrayAccess implements Countable
    29: {
    30:     /**
    31:      * @var array The elements being held by this iterator.
    32:      */
    33:     protected $elements;
    34:
    35:     /**
    36:      * @param array $data
    37:      */
    38:     public function __construct(array $data = array())
    39:     {
    40:         $this->setElements($data);
    41:     }
    42:
    43:     /**
    44:      * @return int
    45:      */
    46:     public function count()
    47:     {
    48:         return count($this->elements);
    49:     }
    50:
    51:     /**
    52:      * @param array $data
    53:      * @return $this
    54:      */
    55:     public function setElements(array $data = array())
    56:     {
    57:         $this->elements = $data;
    58:
    59:         return $this;
    60:     }
    61:
    62:     /**
    63:      * Appends a value to the container.
    64:      *
    65:      * @param $value
    66:      */
    67:     public function append($value)
    68:     {
    69:         $this->elements[] = $value;
    70:     }
    71:
    72:     /**
    73:      * Checks to see whether a particular value exists.
    74:      *
    75:      * @param $value
    76:      * @return bool
    77:      */
    78:     public function valueExists($value)
    79:     {
    80:         return array_search($value, $this->elements) !== false;
    81:     }
    82: }
    83: