change reflect.CopyArray into a method on ArrayValue called CopyFrom

R=rsc
DELTA=16  (12 added, 0 deleted, 4 changed)
OCL=23242
CL=23242
This commit is contained in:
Rob Pike 2009-01-21 15:45:54 -08:00
parent e1e158a90c
commit c5f99ccbdd
3 changed files with 15 additions and 3 deletions

View file

@ -553,8 +553,11 @@ type ArrayValue interface {
Cap() int;
Elem(i int) Value;
SetLen(len int);
CopyFrom(src ArrayValue, n int)
}
func copyArray(dst ArrayValue, src ArrayValue, n int);
/*
Run-time representation of open arrays looks like this:
struct Array {
@ -600,6 +603,10 @@ func (v *openArrayValueStruct) Elem(i int) Value {
return newValueAddr(v.elemtype, Addr(data_uint));
}
func (v *openArrayValueStruct) CopyFrom(src ArrayValue, n int) {
copyArray(v, src, n);
}
type fixedArrayValueStruct struct {
commonValue;
elemtype Type;
@ -628,6 +635,10 @@ func (v *fixedArrayValueStruct) Elem(i int) Value {
return nil
}
func (v *fixedArrayValueStruct) CopyFrom(src ArrayValue, n int) {
copyArray(v, src, n);
}
func arrayCreator(typ Type, addr Addr) Value {
arraytype := typ.(ArrayType);
if arraytype.Open() {
@ -843,7 +854,8 @@ func NewOpenArrayValue(typ ArrayType, len, cap int) ArrayValue {
return newValueAddr(typ, Addr(array));
}
func CopyArray(dst ArrayValue, src ArrayValue, n int) {
// Works on both fixed and open arrays.
func copyArray(dst ArrayValue, src ArrayValue, n int) {
if n == 0 {
return
}