mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
905 B
32 lines
905 B
// 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. |
|
|
|
package flate |
|
|
|
// forwardCopy is like the built-in copy function except that it always goes |
|
// forward from the start, even if the dst and src overlap. |
|
// It is equivalent to: |
|
// for i := 0; i < n; i++ { |
|
// mem[dst+i] = mem[src+i] |
|
// } |
|
func forwardCopy(mem []byte, dst, src, n int) { |
|
if dst <= src { |
|
copy(mem[dst:dst+n], mem[src:src+n]) |
|
return |
|
} |
|
for { |
|
if dst >= src+n { |
|
copy(mem[dst:dst+n], mem[src:src+n]) |
|
return |
|
} |
|
// 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. |
|
k := dst - src |
|
copy(mem[dst:dst+k], mem[src:src+k]) |
|
n -= k |
|
dst += k |
|
} |
|
}
|
|
|