O:39:"phpDocumentor\Descriptor\FileDescriptor":20:{s:7:" * hash";s:32:"6c0b31c60c4500aaca08f1e7bcc05a0f";s:9:" * source";s:8984:"<?php

namespace OpenCloud\Common;

/**
 * Provides an abstraction for working with ordered sets of objects
 *
 * Collection objects are used whenever there are multiples; for example,
 * multiple objects in a container, or multiple servers in a service.
 *
 * @since 1.0
 * @author Glen Campbell <glen.campbell@rackspace.com>
 */
class Collection extends Base 
{

    private $service;
    private $itemclass;
    private $itemlist = array();
    private $pointer = 0;
    private $sortkey;
    private $next_page_class;
    private $next_page_callback;
    private $next_page_url;

    /**
     * A Collection is an array of objects
     *
     * Some assumptions:
     * * The `Collection` class assumes that there exists on its service
     *   a factory method with the same name of the class. For example, if
     *   you create a Collection of class `Foobar`, it will attempt to call
     *   the method `parent::Foobar()` to create instances of that class.
     * * It assumes that the factory method can take an array of values, and
     *   it passes that to the method.
     *
     * @param Service $service - the service associated with the collection
     * @param string $itemclass - the Class of each item in the collection
     *      (assumed to be the name of the factory method)
     * @param array $arr - the input array
     */
    public function __construct($service, $itemclass, $arr) 
    {

        $this->service = $service;

        $this->debug(
            'Collection:service=%s, class=%s, array=%s', 
            get_class($service), 
            $itemclass, 
            print_r($arr, TRUE)
        );

        $this->next_page_class = $itemclass;

        $p = strrpos($itemclass, '\\');

        if ($p !== FALSE) {
            $this->itemclass = substr($itemclass, $p+1);
        } else {
            $this->itemclass = $itemclass;
        }

        if (!is_array($arr)) {
            throw new Exceptions\CollectionError(
                Lang::translate('Cannot create a Collection without an array')
            );
        }

        // save the array of items
        $this->itemlist = $arr;
    }

    public function getItemList()
    {
        return $this->itemlist;
    }

    public function count()
    {
        return count($this->itemList);
    }

    /**
     * Retrieves the service associated with the Collection
     *
     * @return Service
     */
    public function Service() 
    {
        return $this->service;
    }

    /**
     * Resets the pointer to the beginning, but does NOT return the first item
     *
     * @api
     * @return void
     */
    public function Reset() 
    {
        $this->pointer = 0;
    }

    /**
     * Resets the collection pointer back to the first item in the page
     * and returns it
     *
     * This is useful if you're only interested in the first item in the page.
     *
     * @api
     * @return Base the first item in the set
     */
    public function First() 
    {
        $this->Reset();
        return $this->Next();
    }

    /**
     * Returns the next item in the page
     *
     * @api
     * @return Base the next item or FALSE if at the end of the page
     */
    public function Next() 
    {
        if ($this->pointer >= count($this->itemlist)) {
            return false;
        }

        if (method_exists($this->Service(), $this->itemclass)) {
            return $this->Service()->{$this->itemclass}($this->itemlist[$this->pointer++]);
        } elseif (method_exists($this->Service(), 'resource')) {
            return $this->Service()->resource($this->itemclass, $this->itemlist[$this->pointer++]);
        }
        
        return false;
    }

    /**
     * Returns the number of items in the page
     *
     * For most services, this is the total number of items. If the Collection
     * is paginated, however, this only returns the count of items in the
     * current page of data.
     *
     * @api
     * @return integer The number of items in the set
     */
    public function Size() 
    {
        return count($this->itemlist);
    }

    /**
     * sorts the collection on a specified key
     *
     * Note: only top-level keys can be used as the sort key. Note that this
     * only sorts the data in the current page of the Collection (for
     * multi-page data).
     *
     * @api
     * @param string $keyname the name of the field to use as the sort key
     * @return void
     */
    public function Sort($keyname = 'id') 
    {
        $this->sortkey = $keyname;
        usort($this->itemlist, array($this, 'sortCompare'));
    }

    /**
     * selects only specified items from the Collection
     *
     * This provides a simple form of filtering on Collections. For each item
     * in the collection, it calls the callback function, passing it the item.
     * If the callback returns `TRUE`, then the item is retained; if it returns
     * `FALSE`, then the item is deleted from the collection.
     *
     * Note that this should not supersede server-side filtering; the
     * `Collection::Select()` method requires that *all* of the data for the
     * Collection be retrieved from the server before the filtering is
     * performed; this can be very inefficient, especially for large data
     * sets. This method is mostly useful on smaller-sized sets.
     *
     * Example:
     * <code>
     * $services = $connection->ServiceList();
     * $services->Select(function($item){ return $item->region=='ORD';});
     * // now the $services Collection only has items from the ORD region
     * </code>
     *
     * `Select()` is *destructive*; that is, it actually removes entries from
     * the collection. For example, if you use `Select()` to find items with
     * the ID > 10, then use it again to find items that are <= 10, it will
     * return an empty list.
     *
     * @api
     * @param callable $testfunc a callback function that is passed each item
     *      in turn. Note that `Select()` performs an explicit test for
     *      `FALSE`, so functions like `strpos()` need to be cast into a
     *      boolean value (and not just return the integer).
     * @returns void
     * @throws DomainError if callback doesn't return a boolean value
     */
    public function Select($testfunc) 
    {
        foreach ($this->itemlist as $index => $item) {
            $test = call_user_func($testfunc, $item);
            if (!is_bool($test)) {
                throw new Exceptions\DomainError(
                    Lang::translate('Callback function for Collection::Select() did not return boolean')
                );
            }
            if ($test === false) {
                unset($this->itemlist[$index]);
            }
        }
    }

    /**
     * returns the Collection object for the next page of results, or
     * FALSE if there are no more pages
     *
     * Generally, the structure for a multi-page collection will look like
     * this:
     *
     *      $coll = $obj->Collection();
     *      do {
     *          while($item = $coll->Next()) {
     *              // do something with the item
     *          |
     *      } while ($coll = $coll->NextPage());
     *
     * @api
     * @return Collection if there are more pages of results, otherwise FALSE
     */
    public function NextPage() 
    {
        if (isset($this->next_page_url)) {
            return call_user_func(
                $this->next_page_callback,
                $this->next_page_class,
                $this->next_page_url);
        }
        return false;
    }

    /**
     * for paginated collection, sets the callback function and URL for
     * the next page
     *
     * The callback function should have the signature:
     *
     *      function Whatever($class, $url, $parent)
     *
     * and the `$url` should be the URL of the next page of results
     *
     * @param callable $callback the name of the function (or array of
     *      object, function name)
     * @param string $url the URL of the next page of results
     * @return void
     */
    public function SetNextPageCallback($callback, $url) 
    {
        $this->next_page_callback = $callback;
        $this->next_page_url = $url;
    }

    public function getAllItems()
    {
        $items = array();
        foreach ($this->itemlist as $item) {
            $items[] = $this->Service()->{$this->itemclass}($item);
        }
        return $items;
    }

    /********** PRIVATE METHODS **********/

    /**
     * Compares two values of sort keys
     */
    private function sortCompare($a, $b) 
    {
        $key = $this->sortkey;

        // handle strings with strcmp()
        if (is_string($a->$key)) {
            return strcmp($a->$key, $b->$key);
        }

        // handle others with logical comparisons
        if ($a->$key == $b->$key) {
            return 0;
        }

        if ($a->$key < $b->$key) {
            return -1;
        } else {
            return 1;
        }
    }

}
";s:20:" * namespace_aliases";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:11:" * includes";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:12:" * constants";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:12:" * functions";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:10:" * classes";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:10:"Collection";O:40:"phpDocumentor\Descriptor\ClassDescriptor":17:{s:9:" * parent";s:22:"\OpenCloud\Common\Base";s:13:" * implements";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:11:" * abstract";b:0;s:8:" * final";b:0;s:12:" * constants";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:13:" * properties";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:8:{s:7:"service";O:43:"phpDocumentor\Descriptor\PropertyDescriptor":15:{s:9:" * parent";r:14;s:8:" * types";N;s:10:" * default";N;s:9:" * static";b:0;s:13:" * visibility";s:7:"private";s:8:" * fqsen";s:37:"\OpenCloud\Common\Collection::service";s:7:" * name";s:7:"service";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:17;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50007";s:7:" * line";i:17;s:10:" * context";a:1:{i:0;s:8:"$service";}}}}}s:9:"itemclass";O:43:"phpDocumentor\Descriptor\PropertyDescriptor":15:{s:9:" * parent";r:14;s:8:" * types";N;s:10:" * default";N;s:9:" * static";b:0;s:13:" * visibility";s:7:"private";s:8:" * fqsen";s:39:"\OpenCloud\Common\Collection::itemclass";s:7:" * name";s:9:"itemclass";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:18;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50007";s:7:" * line";i:18;s:10:" * context";a:1:{i:0;s:10:"$itemclass";}}}}}s:8:"itemlist";O:43:"phpDocumentor\Descriptor\PropertyDescriptor":15:{s:9:" * parent";r:14;s:8:" * types";N;s:10:" * default";s:7:"array()";s:9:" * static";b:0;s:13:" * visibility";s:7:"private";s:8:" * fqsen";s:38:"\OpenCloud\Common\Collection::itemlist";s:7:" * name";s:8:"itemlist";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:19;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50007";s:7:" * line";i:19;s:10:" * context";a:1:{i:0;s:9:"$itemlist";}}}}}s:7:"pointer";O:43:"phpDocumentor\Descriptor\PropertyDescriptor":15:{s:9:" * parent";r:14;s:8:" * types";N;s:10:" * default";s:1:"0";s:9:" * static";b:0;s:13:" * visibility";s:7:"private";s:8:" * fqsen";s:37:"\OpenCloud\Common\Collection::pointer";s:7:" * name";s:7:"pointer";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:20;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50007";s:7:" * line";i:20;s:10:" * context";a:1:{i:0;s:8:"$pointer";}}}}}s:7:"sortkey";O:43:"phpDocumentor\Descriptor\PropertyDescriptor":15:{s:9:" * parent";r:14;s:8:" * types";N;s:10:" * default";N;s:9:" * static";b:0;s:13:" * visibility";s:7:"private";s:8:" * fqsen";s:37:"\OpenCloud\Common\Collection::sortkey";s:7:" * name";s:7:"sortkey";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:21;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50007";s:7:" * line";i:21;s:10:" * context";a:1:{i:0;s:8:"$sortkey";}}}}}s:15:"next_page_class";O:43:"phpDocumentor\Descriptor\PropertyDescriptor":15:{s:9:" * parent";r:14;s:8:" * types";N;s:10:" * default";N;s:9:" * static";b:0;s:13:" * visibility";s:7:"private";s:8:" * fqsen";s:45:"\OpenCloud\Common\Collection::next_page_class";s:7:" * name";s:15:"next_page_class";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:22;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50007";s:7:" * line";i:22;s:10:" * context";a:1:{i:0;s:16:"$next_page_class";}}}}}s:18:"next_page_callback";O:43:"phpDocumentor\Descriptor\PropertyDescriptor":15:{s:9:" * parent";r:14;s:8:" * types";N;s:10:" * default";N;s:9:" * static";b:0;s:13:" * visibility";s:7:"private";s:8:" * fqsen";s:48:"\OpenCloud\Common\Collection::next_page_callback";s:7:" * name";s:18:"next_page_callback";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:23;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50007";s:7:" * line";i:23;s:10:" * context";a:1:{i:0;s:19:"$next_page_callback";}}}}}s:13:"next_page_url";O:43:"phpDocumentor\Descriptor\PropertyDescriptor":15:{s:9:" * parent";r:14;s:8:" * types";N;s:10:" * default";N;s:9:" * static";b:0;s:13:" * visibility";s:7:"private";s:8:" * fqsen";s:43:"\OpenCloud\Common\Collection::next_page_url";s:7:" * name";s:13:"next_page_url";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:24;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50007";s:7:" * line";i:24;s:10:" * context";a:1:{i:0;s:14:"$next_page_url";}}}}}}}s:10:" * methods";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:14:{s:11:"__construct";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:3:{s:8:"$service";O:43:"phpDocumentor\Descriptor\ArgumentDescriptor":13:{s:8:" * types";a:1:{i:0;s:25:"\OpenCloud\Common\Service";}s:10:" * default";N;s:14:" * byReference";b:0;s:8:" * fqsen";s:0:"";s:7:" * name";s:8:"$service";s:12:" * namespace";N;s:10:" * package";N;s:10:" * summary";s:0:"";s:14:" * description";s:44:"- the service associated with the collection";s:7:" * path";s:0:"";s:7:" * line";i:0;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:10:"$itemclass";O:43:"phpDocumentor\Descriptor\ArgumentDescriptor":13:{s:8:" * types";a:1:{i:0;s:6:"string";}s:10:" * default";N;s:14:" * byReference";b:0;s:8:" * fqsen";s:0:"";s:7:" * name";s:10:"$itemclass";s:12:" * namespace";N;s:10:" * package";N;s:10:" * summary";s:0:"";s:14:" * description";s:94:"- the Class of each item in the collection
     (assumed to be the name of the factory method)";s:7:" * path";s:0:"";s:7:" * line";i:0;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:4:"$arr";O:43:"phpDocumentor\Descriptor\ArgumentDescriptor":13:{s:8:" * types";a:1:{i:0;s:5:"array";}s:10:" * default";N;s:14:" * byReference";b:0;s:8:" * fqsen";s:0:"";s:7:" * name";s:4:"$arr";s:12:" * namespace";N;s:10:" * package";N;s:10:" * summary";s:0:"";s:14:" * description";s:17:"- the input array";s:7:" * path";s:0:"";s:7:" * line";i:0;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}}}s:8:" * fqsen";s:43:"\OpenCloud\Common\Collection::__construct()";s:7:" * name";s:11:"__construct";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:35:"A Collection is an array of objects";s:14:" * description";s:389:"Some assumptions:
* The `Collection` class assumes that there exists on its service
  a factory method with the same name of the class. For example, if
  you create a Collection of class `Foobar`, it will attempt to call
  the method `parent::Foobar()` to create instances of that class.
* It assumes that the factory method can take an array of values, and
  it passes that to the method.";s:7:" * path";s:0:"";s:7:" * line";i:42;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:2:{s:5:"param";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:3:{i:0;O:44:"phpDocumentor\Descriptor\Tag\ParamDescriptor":4:{s:15:" * variableName";s:8:"$service";s:8:" * types";a:1:{i:0;s:25:"\OpenCloud\Common\Service";}s:7:" * name";s:5:"param";s:14:" * description";s:44:"- the service associated with the collection";}i:1;O:44:"phpDocumentor\Descriptor\Tag\ParamDescriptor":4:{s:15:" * variableName";s:10:"$itemclass";s:8:" * types";a:1:{i:0;s:6:"string";}s:7:" * name";s:5:"param";s:14:" * description";s:94:"- the Class of each item in the collection
     (assumed to be the name of the factory method)";}i:2;O:44:"phpDocumentor\Descriptor\Tag\ParamDescriptor":4:{s:15:" * variableName";s:4:"$arr";s:8:" * types";a:1:{i:0;s:5:"array";}s:7:" * name";s:5:"param";s:14:" * description";s:17:"- the input array";}}}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:11:"getItemList";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:8:" * fqsen";s:43:"\OpenCloud\Common\Collection::getItemList()";s:7:" * name";s:11:"getItemList";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:74;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50008";s:7:" * line";i:74;s:10:" * context";a:1:{i:0;s:13:"getItemList()";}}}}}s:5:"count";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:8:" * fqsen";s:37:"\OpenCloud\Common\Collection::count()";s:7:" * name";s:5:"count";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:79;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50008";s:7:" * line";i:79;s:10:" * context";a:1:{i:0;s:7:"count()";}}}}}s:7:"Service";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:8:" * fqsen";s:39:"\OpenCloud\Common\Collection::Service()";s:7:" * name";s:7:"Service";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:52:"Retrieves the service associated with the Collection";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:89;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:2:{s:6:"return";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:45:"phpDocumentor\Descriptor\Tag\ReturnDescriptor":3:{s:8:" * types";a:1:{i:0;s:25:"\OpenCloud\Common\Service";}s:7:" * name";s:6:"return";s:14:" * description";s:0:"";}}}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:5:"Reset";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:8:" * fqsen";s:37:"\OpenCloud\Common\Collection::Reset()";s:7:" * name";s:5:"Reset";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:71:"Resets the pointer to the beginning, but does NOT return the first item";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:100;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:3:{s:3:"api";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:38:"phpDocumentor\Descriptor\TagDescriptor":2:{s:7:" * name";s:3:"api";s:14:" * description";s:0:"";}}}s:6:"return";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:45:"phpDocumentor\Descriptor\Tag\ReturnDescriptor":3:{s:8:" * types";a:1:{i:0;s:4:"void";}s:7:" * name";s:6:"return";s:14:" * description";s:0:"";}}}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:5:"First";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:8:" * fqsen";s:37:"\OpenCloud\Common\Collection::First()";s:7:" * name";s:5:"First";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:79:"Resets the collection pointer back to the first item in the page
and returns it";s:14:" * description";s:71:"This is useful if you're only interested in the first item in the page.";s:7:" * path";s:0:"";s:7:" * line";i:114;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:3:{s:3:"api";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:38:"phpDocumentor\Descriptor\TagDescriptor":2:{s:7:" * name";s:3:"api";s:14:" * description";s:0:"";}}}s:6:"return";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:45:"phpDocumentor\Descriptor\Tag\ReturnDescriptor":3:{s:8:" * types";a:1:{i:0;s:22:"\OpenCloud\Common\Base";}s:7:" * name";s:6:"return";s:14:" * description";s:25:"the first item in the set";}}}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:4:"Next";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:8:" * fqsen";s:36:"\OpenCloud\Common\Collection::Next()";s:7:" * name";s:4:"Next";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:33:"Returns the next item in the page";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:126;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:3:{s:3:"api";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:38:"phpDocumentor\Descriptor\TagDescriptor":2:{s:7:" * name";s:3:"api";s:14:" * description";s:0:"";}}}s:6:"return";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:45:"phpDocumentor\Descriptor\Tag\ReturnDescriptor":3:{s:8:" * types";a:1:{i:0;s:22:"\OpenCloud\Common\Base";}s:7:" * name";s:6:"return";s:14:" * description";s:48:"the next item or FALSE if at the end of the page";}}}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:4:"Size";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:8:" * fqsen";s:36:"\OpenCloud\Common\Collection::Size()";s:7:" * name";s:4:"Size";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:39:"Returns the number of items in the page";s:14:" * description";s:160:"For most services, this is the total number of items. If the Collection
is paginated, however, this only returns the count of items in the
current page of data.";s:7:" * path";s:0:"";s:7:" * line";i:151;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:3:{s:3:"api";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:38:"phpDocumentor\Descriptor\TagDescriptor":2:{s:7:" * name";s:3:"api";s:14:" * description";s:0:"";}}}s:6:"return";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:45:"phpDocumentor\Descriptor\Tag\ReturnDescriptor":3:{s:8:" * types";a:1:{i:0;s:7:"integer";}s:7:" * name";s:6:"return";s:14:" * description";s:30:"The number of items in the set";}}}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:4:"Sort";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"$keyname";O:43:"phpDocumentor\Descriptor\ArgumentDescriptor":13:{s:8:" * types";a:1:{i:0;s:6:"string";}s:10:" * default";s:4:"'id'";s:14:" * byReference";b:0;s:8:" * fqsen";s:0:"";s:7:" * name";s:8:"$keyname";s:12:" * namespace";N;s:10:" * package";N;s:10:" * summary";s:0:"";s:14:" * description";s:44:"the name of the field to use as the sort key";s:7:" * path";s:0:"";s:7:" * line";i:0;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}}}s:8:" * fqsen";s:36:"\OpenCloud\Common\Collection::Sort()";s:7:" * name";s:4:"Sort";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:39:"sorts the collection on a specified key";s:14:" * description";s:150:"Note: only top-level keys can be used as the sort key. Note that this
only sorts the data in the current page of the Collection (for
multi-page data).";s:7:" * path";s:0:"";s:7:" * line";i:167;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:4:{s:3:"api";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:38:"phpDocumentor\Descriptor\TagDescriptor":2:{s:7:" * name";s:3:"api";s:14:" * description";s:0:"";}}}s:5:"param";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:44:"phpDocumentor\Descriptor\Tag\ParamDescriptor":4:{s:15:" * variableName";s:8:"$keyname";s:8:" * types";a:1:{i:0;s:6:"string";}s:7:" * name";s:5:"param";s:14:" * description";s:44:"the name of the field to use as the sort key";}}}s:6:"return";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:45:"phpDocumentor\Descriptor\Tag\ReturnDescriptor":3:{s:8:" * types";a:1:{i:0;s:4:"void";}s:7:" * name";s:6:"return";s:14:" * description";s:0:"";}}}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:6:"Select";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:9:"$testfunc";O:43:"phpDocumentor\Descriptor\ArgumentDescriptor":13:{s:8:" * types";a:1:{i:0;s:8:"callable";}s:10:" * default";N;s:14:" * byReference";b:0;s:8:" * fqsen";s:0:"";s:7:" * name";s:9:"$testfunc";s:12:" * namespace";N;s:10:" * package";N;s:10:" * summary";s:0:"";s:14:" * description";s:229:"a callback function that is passed each item
     in turn. Note that `Select()` performs an explicit test for
     `FALSE`, so functions like `strpos()` need to be cast into a
     boolean value (and not just return the integer).";s:7:" * path";s:0:"";s:7:" * line";i:0;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}}}s:8:" * fqsen";s:38:"\OpenCloud\Common\Collection::Select()";s:7:" * name";s:6:"Select";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:48:"selects only specified items from the Collection";s:14:" * description";s:1025:"This provides a simple form of filtering on Collections. For each item
in the collection, it calls the callback function, passing it the item.
If the callback returns `TRUE`, then the item is retained; if it returns
`FALSE`, then the item is deleted from the collection.

Note that this should not supersede server-side filtering; the
`Collection::Select()` method requires that *all* of the data for the
Collection be retrieved from the server before the filtering is
performed; this can be very inefficient, especially for large data
sets. This method is mostly useful on smaller-sized sets.

Example:
<code>
$services = $connection->ServiceList();
$services->Select(function($item){ return $item->region=='ORD';});
// now the $services Collection only has items from the ORD region
</code>

`Select()` is *destructive*; that is, it actually removes entries from
the collection. For example, if you use `Select()` to find items with
the ID > 10, then use it again to find items that are <= 10, it will
return an empty list.";s:7:" * path";s:0:"";s:7:" * line";i:207;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:5:{s:3:"api";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:38:"phpDocumentor\Descriptor\TagDescriptor":2:{s:7:" * name";s:3:"api";s:14:" * description";s:0:"";}}}s:5:"param";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:44:"phpDocumentor\Descriptor\Tag\ParamDescriptor":4:{s:15:" * variableName";s:9:"$testfunc";s:8:" * types";a:1:{i:0;s:8:"callable";}s:7:" * name";s:5:"param";s:14:" * description";s:229:"a callback function that is passed each item
     in turn. Note that `Select()` performs an explicit test for
     `FALSE`, so functions like `strpos()` need to be cast into a
     boolean value (and not just return the integer).";}}}s:7:"returns";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:38:"phpDocumentor\Descriptor\TagDescriptor":2:{s:7:" * name";s:7:"returns";s:14:" * description";s:4:"void";}}}s:6:"throws";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:45:"phpDocumentor\Descriptor\Tag\ThrowsDescriptor":3:{s:8:" * types";a:1:{i:0;s:29:"\OpenCloud\Common\DomainError";}s:7:" * name";s:6:"throws";s:14:" * description";s:42:"if callback doesn't return a boolean value";}}}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:8:"NextPage";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:8:" * fqsen";s:40:"\OpenCloud\Common\Collection::NextPage()";s:7:" * name";s:8:"NextPage";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:95:"returns the Collection object for the next page of results, or
FALSE if there are no more pages";s:14:" * description";s:253:"Generally, the structure for a multi-page collection will look like
this:

     $coll = $obj->Collection();
     do {
         while($item = $coll->Next()) {
             // do something with the item
         |
     } while ($coll = $coll->NextPage());";s:7:" * path";s:0:"";s:7:" * line";i:239;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:3:{s:3:"api";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:38:"phpDocumentor\Descriptor\TagDescriptor":2:{s:7:" * name";s:3:"api";s:14:" * description";s:0:"";}}}s:6:"return";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:45:"phpDocumentor\Descriptor\Tag\ReturnDescriptor":3:{s:8:" * types";a:1:{i:0;s:28:"\OpenCloud\Common\Collection";}s:7:" * name";s:6:"return";s:14:" * description";s:51:"if there are more pages of results, otherwise FALSE";}}}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:19:"SetNextPageCallback";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:2:{s:9:"$callback";O:43:"phpDocumentor\Descriptor\ArgumentDescriptor":13:{s:8:" * types";a:1:{i:0;s:8:"callable";}s:10:" * default";N;s:14:" * byReference";b:0;s:8:" * fqsen";s:0:"";s:7:" * name";s:9:"$callback";s:12:" * namespace";N;s:10:" * package";N;s:10:" * summary";s:0:"";s:14:" * description";s:65:"the name of the function (or array of
     object, function name)";s:7:" * path";s:0:"";s:7:" * line";i:0;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:4:"$url";O:43:"phpDocumentor\Descriptor\ArgumentDescriptor":13:{s:8:" * types";a:1:{i:0;s:6:"string";}s:10:" * default";N;s:14:" * byReference";b:0;s:8:" * fqsen";s:0:"";s:7:" * name";s:4:"$url";s:12:" * namespace";N;s:10:" * package";N;s:10:" * summary";s:0:"";s:14:" * description";s:35:"the URL of the next page of results";s:7:" * path";s:0:"";s:7:" * line";i:0;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}}}s:8:" * fqsen";s:51:"\OpenCloud\Common\Collection::SetNextPageCallback()";s:7:" * name";s:19:"SetNextPageCallback";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:78:"for paginated collection, sets the callback function and URL for
the next page";s:14:" * description";s:157:"The callback function should have the signature:

     function Whatever($class, $url, $parent)

and the `$url` should be the URL of the next page of results";s:7:" * path";s:0:"";s:7:" * line";i:265;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:3:{s:5:"param";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:2:{i:0;O:44:"phpDocumentor\Descriptor\Tag\ParamDescriptor":4:{s:15:" * variableName";s:9:"$callback";s:8:" * types";a:1:{i:0;s:8:"callable";}s:7:" * name";s:5:"param";s:14:" * description";s:65:"the name of the function (or array of
     object, function name)";}i:1;O:44:"phpDocumentor\Descriptor\Tag\ParamDescriptor":4:{s:15:" * variableName";s:4:"$url";s:8:" * types";a:1:{i:0;s:6:"string";}s:7:" * name";s:5:"param";s:14:" * description";s:35:"the URL of the next page of results";}}}s:6:"return";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:45:"phpDocumentor\Descriptor\Tag\ReturnDescriptor":3:{s:8:" * types";a:1:{i:0;s:4:"void";}s:7:" * name";s:6:"return";s:14:" * description";s:0:"";}}}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:11:"getAllItems";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:6:"public";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:8:" * fqsen";s:43:"\OpenCloud\Common\Collection::getAllItems()";s:7:" * name";s:11:"getAllItems";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:271;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:40:"phpDocumentor\Descriptor\Validator\Error":4:{s:11:" * severity";s:5:"error";s:7:" * code";s:13:"PPC:ERR-50008";s:7:" * line";i:271;s:10:" * context";a:1:{i:0;s:13:"getAllItems()";}}}}}s:11:"sortCompare";O:41:"phpDocumentor\Descriptor\MethodDescriptor":16:{s:9:" * parent";r:14;s:11:" * abstract";b:0;s:8:" * final";b:0;s:9:" * static";b:0;s:13:" * visibility";s:7:"private";s:12:" * arguments";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:2:{s:2:"$a";O:43:"phpDocumentor\Descriptor\ArgumentDescriptor":13:{s:8:" * types";a:0:{}s:10:" * default";N;s:14:" * byReference";b:0;s:8:" * fqsen";s:0:"";s:7:" * name";s:2:"$a";s:12:" * namespace";N;s:10:" * package";N;s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:0;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}s:2:"$b";O:43:"phpDocumentor\Descriptor\ArgumentDescriptor":13:{s:8:" * types";a:0:{}s:10:" * default";N;s:14:" * byReference";b:0;s:8:" * fqsen";s:0:"";s:7:" * name";s:2:"$b";s:12:" * namespace";N;s:10:" * package";N;s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:0;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}}}s:8:" * fqsen";s:43:"\OpenCloud\Common\Collection::sortCompare()";s:7:" * name";s:11:"sortCompare";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:32:"Compares two values of sort keys";s:14:" * description";s:0:"";s:7:" * path";s:0:"";s:7:" * line";i:285;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:2:{s:5:"param";a:0:{}s:8:"internal";N;}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}}}s:8:" * fqsen";s:28:"\OpenCloud\Common\Collection";s:7:" * name";s:10:"Collection";s:12:" * namespace";s:17:"\OpenCloud\Common";s:10:" * package";s:0:"";s:10:" * summary";s:64:"Provides an abstraction for working with ordered sets of objects";s:14:" * description";s:137:"Collection objects are used whenever there are multiples; for example,
multiple objects in a container, or multiple servers in a service.";s:7:" * path";r:1;s:7:" * line";i:14;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:2:{s:5:"since";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:44:"phpDocumentor\Descriptor\Tag\SinceDescriptor":3:{s:10:" * version";s:3:"1.0";s:7:" * name";s:5:"since";s:14:" * description";s:0:"";}}}s:6:"author";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:1:{i:0;O:45:"phpDocumentor\Descriptor\Tag\AuthorDescriptor":2:{s:7:" * name";s:6:"author";s:14:" * description";s:43:"Glen Campbell <glen.campbell@rackspace.com>";}}}}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}}}s:13:" * interfaces";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * traits";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:10:" * markers";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:8:" * fqsen";s:0:"";s:7:" * name";s:14:"Collection.php";s:12:" * namespace";N;s:10:" * package";s:0:"";s:10:" * summary";s:0:"";s:14:" * description";s:0:"";s:7:" * path";s:31:"OpenCloud/Common/Collection.php";s:7:" * line";i:0;s:7:" * tags";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}s:9:" * errors";O:35:"phpDocumentor\Descriptor\Collection":1:{s:8:" * items";a:0:{}}}