/** * Builds the index for the given collection * * @param DatabaseInterface|\Iterator $database * @return $this */ public function indexDatabase($database) { // Clear the map $this->map = array(); /** @var SplFixedArray $collection */ $collection = null; if ($database instanceof DatabaseRawDataInterface) { $collection = $database->getRawData(); } if ($database instanceof SplFixedArray) { // Use the fixed array as is } elseif (is_array($database)) { $collection = SplFixedArray::fromArray($database); } elseif ($database instanceof \Iterator) { $collection = SplFixedArray::fromArray(iterator_to_array($database)); } else { throw new InvalidIndexException(sprintf('Can not build index of argument of type %s', is_object($database) ? get_class($database) : gettype($database))); } $position = 0; $count = $collection->getSize(); if ($count > 0) { do { $tempEntry = DocumentUtility::assertDocumentIdentifier($database[$position]); $this->addEntryWithPosition($tempEntry, $position); } while (++$position < $count); } }
/** * Builds the index for the given collection * * @param DatabaseInterface|\Iterator $database * @return $this */ public function indexDatabase($database) { // Clear the map $this->map = array(); /** @var SplFixedArray $collection */ $collection = null; if ($database instanceof DatabaseRawDataInterface) { $collection = $database->getRawData(); } elseif ($database instanceof SplFixedArray) { $collection = $database; } elseif (is_array($database)) { $collection = SplFixedArray::fromArray($database); } elseif ($database instanceof \Iterator) { $collection = SplFixedArray::fromArray(iterator_to_array($database)); } else { throw new InvalidIndexException(sprintf('Can not build index of argument of type %s', is_object($database) ? get_class($database) : gettype($database))); } $position = 0; $count = $collection->getSize(); $tempMap = array(); if ($count > 0) { $collectionContainsDocumentObjects = $collection[0] instanceof DocumentInterface; do { $entry = $collection[$position]; if ($collectionContainsDocumentObjects) { $key = DocumentUtility::assertDocumentIdentifier($entry)->getId(); } else { $key = DocumentUtility::getIdentifierForDocument($entry); } // DebugUtility::var_dump('Index', $key); if (isset($tempMap[$key])) { throw new DuplicateEntryException(sprintf('Duplicate entry \'%s\' for identifier', $key), 1415046937); } $tempMap[$key] = $position; } while (++$position < $count); } $this->map = $tempMap; }