mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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:
parent
e1e158a90c
commit
c5f99ccbdd
3 changed files with 15 additions and 3 deletions
|
|
@ -149,7 +149,7 @@ func (b *_StructBuilder) Elem(i int) Builder {
|
||||||
n *= 2
|
n *= 2
|
||||||
}
|
}
|
||||||
av1 := reflect.NewOpenArrayValue(av.Type(), av.Len(), n);
|
av1 := reflect.NewOpenArrayValue(av.Type(), av.Len(), n);
|
||||||
reflect.CopyArray(av1, av, av.Len());
|
av1.CopyFrom(av, av.Len());
|
||||||
pv.SetSub(av1);
|
pv.SetSub(av1);
|
||||||
av = av1;
|
av = av1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -308,7 +308,7 @@ func TestCopyArray(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for tocopy := 1; tocopy <= 7; tocopy++ {
|
for tocopy := 1; tocopy <= 7; tocopy++ {
|
||||||
CopyArray(vb.(PtrValue).Sub(), va.(PtrValue).Sub(), tocopy);
|
vb.(PtrValue).Sub().(ArrayValue).CopyFrom(va.(PtrValue).Sub(), tocopy);
|
||||||
for i := 0; i < tocopy; i++ {
|
for i := 0; i < tocopy; i++ {
|
||||||
if a[i] != b[i] {
|
if a[i] != b[i] {
|
||||||
t.Errorf("1 tocopy=%d a[%d]=%d, b[%d]=%d",
|
t.Errorf("1 tocopy=%d a[%d]=%d, b[%d]=%d",
|
||||||
|
|
|
||||||
|
|
@ -553,8 +553,11 @@ type ArrayValue interface {
|
||||||
Cap() int;
|
Cap() int;
|
||||||
Elem(i int) Value;
|
Elem(i int) Value;
|
||||||
SetLen(len int);
|
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:
|
Run-time representation of open arrays looks like this:
|
||||||
struct Array {
|
struct Array {
|
||||||
|
|
@ -600,6 +603,10 @@ func (v *openArrayValueStruct) Elem(i int) Value {
|
||||||
return newValueAddr(v.elemtype, Addr(data_uint));
|
return newValueAddr(v.elemtype, Addr(data_uint));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *openArrayValueStruct) CopyFrom(src ArrayValue, n int) {
|
||||||
|
copyArray(v, src, n);
|
||||||
|
}
|
||||||
|
|
||||||
type fixedArrayValueStruct struct {
|
type fixedArrayValueStruct struct {
|
||||||
commonValue;
|
commonValue;
|
||||||
elemtype Type;
|
elemtype Type;
|
||||||
|
|
@ -628,6 +635,10 @@ func (v *fixedArrayValueStruct) Elem(i int) Value {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *fixedArrayValueStruct) CopyFrom(src ArrayValue, n int) {
|
||||||
|
copyArray(v, src, n);
|
||||||
|
}
|
||||||
|
|
||||||
func arrayCreator(typ Type, addr Addr) Value {
|
func arrayCreator(typ Type, addr Addr) Value {
|
||||||
arraytype := typ.(ArrayType);
|
arraytype := typ.(ArrayType);
|
||||||
if arraytype.Open() {
|
if arraytype.Open() {
|
||||||
|
|
@ -843,7 +854,8 @@ func NewOpenArrayValue(typ ArrayType, len, cap int) ArrayValue {
|
||||||
return newValueAddr(typ, Addr(array));
|
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 {
|
if n == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue