| 497 | // Handle vtkAbstractArrays that aren't vtkDataArrays. |
| 498 | template <class iterT> |
| 499 | void vtkDataSetAttributesCopyValues(iterT* destIter, const int* outExt, vtkIdType outIncs[3], |
| 500 | iterT* srcIter, const int* inExt, vtkIdType inIncs[3]) |
| 501 | { |
| 502 | int data_type_size = srcIter->GetArray()->GetDataTypeSize(); |
| 503 | vtkIdType rowLength = outIncs[1]; |
| 504 | unsigned char* inPtr; |
| 505 | unsigned char* outPtr; |
| 506 | unsigned char* inZPtr; |
| 507 | unsigned char* outZPtr; |
| 508 | |
| 509 | // Get the starting input pointer. |
| 510 | inZPtr = static_cast<unsigned char*>(srcIter->GetArray()->GetVoidPointer(0)); |
| 511 | // Shift to the start of the subextent. |
| 512 | inZPtr += (outExt[0] - inExt[0]) * inIncs[0] * data_type_size + |
| 513 | (outExt[2] - inExt[2]) * inIncs[1] * data_type_size + |
| 514 | (outExt[4] - inExt[4]) * inIncs[2] * data_type_size; |
| 515 | |
| 516 | // Get output pointer. |
| 517 | outZPtr = static_cast<unsigned char*>(destIter->GetArray()->GetVoidPointer(0)); |
| 518 | |
| 519 | // Loop over z axis. |
| 520 | for (int zIdx = outExt[4]; zIdx <= outExt[5]; ++zIdx) |
| 521 | { |
| 522 | inPtr = inZPtr; |
| 523 | outPtr = outZPtr; |
| 524 | for (int yIdx = outExt[2]; yIdx <= outExt[3]; ++yIdx) |
| 525 | { |
| 526 | memcpy(outPtr, inPtr, rowLength * data_type_size); |
| 527 | inPtr += inIncs[1] * data_type_size; |
| 528 | outPtr += outIncs[1] * data_type_size; |
| 529 | } |
| 530 | inZPtr += inIncs[2] * data_type_size; |
| 531 | outZPtr += outIncs[2] * data_type_size; |
| 532 | } |
| 533 | } |
| 534 | |
| 535 | //------------------------------------------------------------------------------ |
| 536 | // Specialize for vtkStringArray. |
no test coverage detected