mirror of
https://github.com/golang/go
synced 2024-09-21 00:43:04 +00:00
change the representation of arrays in protobufs from *[]item to []item.
for simplicity of user's code, optional arrays of bytes also don't have a pointer. requires adding a "Set()" method to arrays in reflect. still to do: protocol compilers, google/net/rpc. R=rsc DELTA=227 (36 added, 95 deleted, 96 changed) OCL=23387 CL=23389
This commit is contained in:
parent
9e3b0f444a
commit
1b3299ed0b
|
@ -553,6 +553,7 @@ type ArrayValue interface {
|
|||
Cap() int;
|
||||
Elem(i int) Value;
|
||||
SetLen(len int);
|
||||
Set(src ArrayValue);
|
||||
CopyFrom(src ArrayValue, n int)
|
||||
}
|
||||
|
||||
|
@ -598,6 +599,17 @@ func (v *openArrayValueStruct) SetLen(len int) {
|
|||
v.array.len = uint32(len);
|
||||
}
|
||||
|
||||
func (v *openArrayValueStruct) Set(src ArrayValue) {
|
||||
if !src.Open() {
|
||||
panic("can't set from fixed array");
|
||||
}
|
||||
s := src.(*openArrayValueStruct);
|
||||
if !equalType(v.typ, s.typ) {
|
||||
panicln("incompatible array types in ArrayValue.Set()");
|
||||
}
|
||||
*v.array = *s.array;
|
||||
}
|
||||
|
||||
func (v *openArrayValueStruct) Elem(i int) Value {
|
||||
data_uint := uintptr(v.array.data) + uintptr(i * v.elemsize);
|
||||
return newValueAddr(v.elemtype, Addr(data_uint));
|
||||
|
@ -629,6 +641,10 @@ func (v *fixedArrayValueStruct) Cap() int {
|
|||
func (v *fixedArrayValueStruct) SetLen(len int) {
|
||||
}
|
||||
|
||||
func (v *fixedArrayValueStruct) Set(src ArrayValue) {
|
||||
panicln("can't set fixed array");
|
||||
}
|
||||
|
||||
func (v *fixedArrayValueStruct) Elem(i int) Value {
|
||||
data_uint := uintptr(v.addr) + uintptr(i * v.elemsize);
|
||||
return newValueAddr(v.elemtype, Addr(data_uint));
|
||||
|
|
Loading…
Reference in a new issue