/** * @brief Insert data from a map to an array. * * @param[in] query * @param[inout] array the array to receive data * @param[in] m the map of Coordinate --> Value */ void insertMapDataIntoArray( std::shared_ptr<Query>& query, MemArray& array, CoordValueMap const& m) { Coordinates coord(1); coord[0] = 0; vector< std::shared_ptr<ArrayIterator> > arrayIters(array.getArrayDesc().getAttributes(true).size()); vector< std::shared_ptr<ChunkIterator> > chunkIters(arrayIters.size()); for (size_t i = 0; i < arrayIters.size(); i++) { arrayIters[i] = array.getIterator(i); chunkIters[i] = ((MemChunk&)arrayIters[i]->newChunk(coord)).getIterator( query, ChunkIterator::SEQUENTIAL_WRITE); } BOOST_FOREACH(CoordValueMapEntry const& p, m) { coord[0] = p.first; for (size_t i = 0; i < chunkIters.size(); i++) { if (!chunkIters[i]->setPosition(coord)) { chunkIters[i]->flush(); chunkIters[i].reset(); chunkIters[i] = ((MemChunk&)arrayIters[i]->newChunk(coord)).getIterator( query, ChunkIterator::SEQUENTIAL_WRITE); chunkIters[i]->setPosition(coord); } chunkIters[i]->writeItem(p.second); } }