| 78 | } |
| 79 | |
| 80 | int vtkExtentTranslator::PieceToExtentThreadSafe(int piece, int numPieces, int ghostLevel, |
| 81 | int* wholeExtent, int* resultExtent, int splitMode, int byPoints) |
| 82 | { |
| 83 | memcpy(resultExtent, wholeExtent, sizeof(int) * 6); |
| 84 | int ret; |
| 85 | if (byPoints) |
| 86 | { |
| 87 | ret = this->SplitExtentByPoints(piece, numPieces, resultExtent, splitMode); |
| 88 | } |
| 89 | else |
| 90 | { |
| 91 | ret = this->SplitExtent(piece, numPieces, resultExtent, splitMode); |
| 92 | } |
| 93 | |
| 94 | if (ret == 0) |
| 95 | { |
| 96 | // Nothing in this piece. |
| 97 | resultExtent[0] = resultExtent[2] = resultExtent[4] = 0; |
| 98 | resultExtent[1] = resultExtent[3] = resultExtent[5] = -1; |
| 99 | return 0; |
| 100 | } |
| 101 | if (ghostLevel > 0) |
| 102 | { |
| 103 | resultExtent[0] -= ghostLevel; |
| 104 | resultExtent[1] += ghostLevel; |
| 105 | resultExtent[2] -= ghostLevel; |
| 106 | resultExtent[3] += ghostLevel; |
| 107 | resultExtent[4] -= ghostLevel; |
| 108 | resultExtent[5] += ghostLevel; |
| 109 | |
| 110 | resultExtent[0] = std::max(resultExtent[0], wholeExtent[0]); |
| 111 | resultExtent[1] = std::min(resultExtent[1], wholeExtent[1]); |
| 112 | resultExtent[2] = std::max(resultExtent[2], wholeExtent[2]); |
| 113 | resultExtent[3] = std::min(resultExtent[3], wholeExtent[3]); |
| 114 | resultExtent[4] = std::max(resultExtent[4], wholeExtent[4]); |
| 115 | resultExtent[5] = std::min(resultExtent[5], wholeExtent[5]); |
| 116 | } |
| 117 | |
| 118 | return 1; |
| 119 | } |
| 120 | |
| 121 | //------------------------------------------------------------------------------ |
| 122 | int vtkExtentTranslator::SplitExtent(int piece, int numPieces, int* ext, int splitMode) |