| // Copyright 2012 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| // forwardCopy is like the built-in copy function except that it always goes |
| // forward from the start, even if the dst and src overlap. |
| // for i := 0; i < n; i++ { |
| // mem[dst+i] = mem[src+i] |
| func forwardCopy(mem []byte, dst, src, n int) { |
| copy(mem[dst:dst+n], mem[src:src+n]) |
| copy(mem[dst:dst+n], mem[src:src+n]) |
| // There is some forward overlap. The destination |
| // will be filled with a repeated pattern of mem[src:src+k]. |
| // We copy one instance of the pattern here, then repeat. |
| // Each time around this loop k will double. |
| copy(mem[dst:dst+k], mem[src:src+k]) |