void AbstractTable::copyRowFrom(const hyrise::storage::c_atable_ptr_t& source, const size_t src_row, const size_t dst_row, const bool copy_values, const bool use_memcpy) { if (copy_values) { for (size_t column = 0; column < source->columnCount(); column++) { copyValueFrom(source, column, src_row, column, dst_row); } } else { if (use_memcpy) { // Use slices & memcpy // Assumes destination (this) is single row container assert(sliceCount() == 1); // this only gets the dest pointer, nothing else value_id_t *dst = (value_id_t *) atSlice(0, dst_row); size_t inc_width = 0, width = 0; for (size_t slice = 0; slice < source->sliceCount(); slice++) { // gets pointer to container at the row value_id_t *src = (value_id_t *) source->atSlice(slice, src_row); // slice width tells us how much memory we can copy width = source->getSliceWidth(slice); memcpy((char *)(dst) + inc_width, src, width); inc_width += width; } } else { // Copy single values for (size_t column = 0; column < source->columnCount(); column++) { setValueId(column, dst_row, source->getValueId(column, src_row)); } } } }
void AbstractTable::copyRowFrom(const c_atable_ptr_t& source, const size_t src_row, const size_t dst_row, const bool copy_values, const bool use_memcpy) { if (copy_values) { for (size_t column = 0; column < source->columnCount(); column++) { copyValueFrom(source, column, src_row, column, dst_row); } } else { // Copy single values for (size_t column = 0; column < source->columnCount(); column++) { setValueId(column, dst_row, source->getValueId(column, src_row)); } } }