| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | 
							- <?php
 
- namespace Aws\Api;
 
- /**
 
-  * Builds shape based on shape references.
 
-  */
 
- class ShapeMap
 
- {
 
-     /** @var array */
 
-     private $definitions;
 
-     /** @var Shape[] */
 
-     private $simple;
 
-     /**
 
-      * @param array $shapeModels Associative array of shape definitions.
 
-      */
 
-     public function __construct(array $shapeModels)
 
-     {
 
-         $this->definitions = $shapeModels;
 
-     }
 
-     /**
 
-      * Get an array of shape names.
 
-      *
 
-      * @return array
 
-      */
 
-     public function getShapeNames()
 
-     {
 
-         return array_keys($this->definitions);
 
-     }
 
-     /**
 
-      * Resolve a shape reference
 
-      *
 
-      * @param array $shapeRef Shape reference shape
 
-      *
 
-      * @return Shape
 
-      * @throws \InvalidArgumentException
 
-      */
 
-     public function resolve(array $shapeRef)
 
-     {
 
-         $shape = $shapeRef['shape'];
 
-         if (!isset($this->definitions[$shape])) {
 
-             throw new \InvalidArgumentException('Shape not found: ' . $shape);
 
-         }
 
-         $isSimple = count($shapeRef) == 1;
 
-         if ($isSimple && isset($this->simple[$shape])) {
 
-             return $this->simple[$shape];
 
-         }
 
-         $definition = $shapeRef + $this->definitions[$shape];
 
-         $definition['name'] = $definition['shape'];
 
-         if (isset($definition['shape'])) {
 
-             unset($definition['shape']);
 
-         }
 
-         $result = Shape::create($definition, $this);
 
-         if ($isSimple) {
 
-             $this->simple[$shape] = $result;
 
-         }
 
-         return $result;
 
-     }
 
- }
 
 
  |