void IteratorBase::copyDatabaseData(PointBuffer& source, PointBuffer& destination, Dimension const& dest_dim, boost::uint32_t source_starting_position, boost::uint32_t destination_starting_position, boost::uint32_t howMany) { boost::optional<Dimension const&> source_dim = source.getSchema().getDimensionOptional(dest_dim.getName()); if (!source_dim) { return; } for (boost::uint32_t i = 0; i < howMany; ++i) { if (dest_dim.getInterpretation() == source_dim->getInterpretation() && dest_dim.getByteSize() == source_dim->getByteSize() && pdal::Utils::compare_distance(dest_dim.getNumericScale(), source_dim->getNumericScale()) && pdal::Utils::compare_distance(dest_dim.getNumericOffset(), source_dim->getNumericOffset()) && dest_dim.getEndianness() == source_dim->getEndianness() ) { // FIXME: This test could produce false positives boost::uint8_t* source_position = source.getData(source_starting_position+i) + source_dim->getByteOffset(); boost::uint8_t* destination_position = destination.getData(destination_starting_position + i) + dest_dim.getByteOffset(); memcpy(destination_position, source_position, source_dim->getByteSize()); } else { PointBuffer::scaleData(source, destination, *source_dim, dest_dim, source_starting_position + i, destination_starting_position + i); } } }