aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/encoding/binary
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2012-02-09 11:42:10 +1100
committerRob Pike <r@golang.org>2012-02-09 11:42:10 +1100
commit025c9a946de654dc3917fc1bfd3ad998fafc0f65 (patch)
tree076819a553cdc0a5621f71847abdc531b2b7267b /src/pkg/encoding/binary
parent8c4a2ca83b5d1ab04361a15d9380f13077b4dda4 (diff)
downloadgo-025c9a946de654dc3917fc1bfd3ad998fafc0f65.tar.xz
encoding/binary: slices are allowed; say so
Fixes #2629. R=golang-dev, bradfitz CC=golang-dev https://golang.org/cl/5642069
Diffstat (limited to 'src/pkg/encoding/binary')
-rw-r--r--src/pkg/encoding/binary/binary.go19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/pkg/encoding/binary/binary.go b/src/pkg/encoding/binary/binary.go
index 7f10d40a11..c96c179de6 100644
--- a/src/pkg/encoding/binary/binary.go
+++ b/src/pkg/encoding/binary/binary.go
@@ -117,11 +117,11 @@ func (bigEndian) String() string { return "BigEndian" }
func (bigEndian) GoString() string { return "binary.BigEndian" }
// Read reads structured binary data from r into data.
-// Data must be a pointer to a fixed-size value or a slice
-// of fixed-size values.
-// A fixed-size value is either a fixed-size arithmetic
+// Data must be a pointer to a decodable value or a slice
+// of decodable values.
+// A decodable value is either a fixed-size arithmetic
// type (int8, uint8, int16, float32, complex64, ...)
-// or an array or struct containing only fixed-size values.
+// or an array, slice or struct containing only decodable values.
// Bytes read from r are decoded using the specified byte order
// and written to successive fields of the data.
func Read(r io.Reader, order ByteOrder, data interface{}) error {
@@ -176,11 +176,11 @@ func Read(r io.Reader, order ByteOrder, data interface{}) error {
}
// Write writes the binary representation of data into w.
-// Data must be a fixed-size value or a pointer to
-// a fixed-size value.
-// A fixed-size value is either a fixed-size arithmetic
+// Data must be an encodable value or a pointer to
+// an encodable value.
+// An encodable value is either a fixed-size arithmetic
// type (int8, uint8, int16, float32, complex64, ...)
-// or an array or struct containing only fixed-size values.
+// or an array, slice or struct containing only encodable values.
// Bytes written to w are encoded using the specified byte order
// and read from successive fields of the data.
func Write(w io.Writer, order ByteOrder, data interface{}) error {
@@ -379,6 +379,7 @@ func (d *decoder) value(v reflect.Value) {
for i := 0; i < l; i++ {
d.value(v.Index(i))
}
+
case reflect.Struct:
l := v.NumField()
for i := 0; i < l; i++ {
@@ -434,11 +435,13 @@ func (e *encoder) value(v reflect.Value) {
for i := 0; i < l; i++ {
e.value(v.Index(i))
}
+
case reflect.Struct:
l := v.NumField()
for i := 0; i < l; i++ {
e.value(v.Field(i))
}
+
case reflect.Slice:
l := v.Len()
for i := 0; i < l; i++ {