Commit c5f99ccb authored by Rob Pike's avatar Rob Pike

change reflect.CopyArray into a method on ArrayValue called CopyFrom

R=rsc
DELTA=16  (12 added, 0 deleted, 4 changed)
OCL=23242
CL=23242
parent e1e158a9
...@@ -149,7 +149,7 @@ func (b *_StructBuilder) Elem(i int) Builder { ...@@ -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) { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment