| 107 | } |
| 108 | |
| 109 | static inline void Copy(TTargetChunk* target, size_t targetSize, const TSourceChunk* source, size_t sourceSize) { |
| 110 | Y_ASSERT(targetSize * BLOCK_SIZE >= sourceSize); |
| 111 | if (targetSize * BLOCK_SIZE > sourceSize) { |
| 112 | ::Fill(target + sourceSize / BLOCK_SIZE, target + targetSize, 0); |
| 113 | } |
| 114 | size_t i = 0; |
| 115 | for (; i < sourceSize / BLOCK_SIZE; ++i) { |
| 116 | target[i] = CopyFullChunk(source + i * BLOCK_SIZE); |
| 117 | } |
| 118 | if (0 != sourceSize % BLOCK_SIZE) { |
| 119 | target[i] = CopyPartChunk(source + i * BLOCK_SIZE, sourceSize % BLOCK_SIZE); |
| 120 | } |
| 121 | } |
| 122 | }; |
| 123 | |
| 124 | template <typename TChunk> |