// ReadPackets reads a number of packets from a packet table. func (t *Table) ReadPackets(start, nrecords int, data interface{}) error { c_start := C.hsize_t(start) c_nrecords := C.size_t(nrecords) rv := reflect.Indirect(reflect.ValueOf(data)) rt := rv.Type() c_data := unsafe.Pointer(nil) switch rt.Kind() { case reflect.Array: if rv.Len() < nrecords { panic(fmt.Errorf("not enough capacity in array (cap=%d)", rv.Len())) } c_data = unsafe.Pointer(rv.Index(0).UnsafeAddr()) case reflect.Slice: if rv.Len() < nrecords { panic(fmt.Errorf("not enough capacity in slice (cap=%d)", rv.Len())) } slice := (*reflect.SliceHeader)(unsafe.Pointer(rv.UnsafeAddr())) c_data = unsafe.Pointer(slice.Data) default: panic(fmt.Errorf("unhandled kind (%s), need slice or array", rt.Kind())) } err := C.H5PTread_packets(t.id, c_start, c_nrecords, c_data) return h5err(err) }
// Reads a number of packets from a packet table. // herr_t H5PTread_packets( hid_t table_id, hsize_t start, size_t nrecords, void* data) func (t *Table) ReadPackets(start, nrecords int, data interface{}) error { c_start := C.hsize_t(start) c_nrecords := C.size_t(nrecords) rt := reflect.TypeOf(data) rv := reflect.ValueOf(data) c_data := unsafe.Pointer(nil) switch rt.Kind() { case reflect.Array: //fmt.Printf("--> array\n") if rv.Cap() < nrecords { panic(fmt.Sprintf("not enough capacity in array (cap=%d)", rv.Cap())) } c_data = unsafe.Pointer(rv.Index(0).UnsafeAddr()) //c_nrecords = C.size_t(rv.Cap()) case reflect.Slice: //fmt.Printf("--> slice\n") if rv.Cap() < nrecords { panic(fmt.Sprintf("not enough capacity in slice (cap=%d)", rv.Cap())) // buf_slice := reflect.MakeSlice(rt, nrecords, nrecords) // rv.Set(reflect.AppendSlice(rv, buf_slice)) } slice := (*reflect.SliceHeader)(unsafe.Pointer(rv.UnsafeAddr())) c_data = unsafe.Pointer(slice.Data) //c_nrecords = C.size_t(rv.Cap()) default: panic(fmt.Sprintf("unhandled kind (%s) need slice or array", rt.Kind())) } err := C.H5PTread_packets(t.id, c_start, c_nrecords, c_data) return togo_err(err) }
// ReadPackets reads a number of packets from a packet table. func (t *Table) ReadPackets(start, nrecords int, data interface{}) error { c_start := C.hsize_t(start) c_nrecords := C.size_t(nrecords) rt := reflect.TypeOf(data) rv := reflect.ValueOf(data) c_data := unsafe.Pointer(nil) switch rt.Kind() { case reflect.Array: if rv.Cap() < nrecords { panic(fmt.Sprintf("not enough capacity in array (cap=%d)", rv.Cap())) } c_data = unsafe.Pointer(rv.Index(0).UnsafeAddr()) default: panic(fmt.Sprintf("unhandled kind (%s), need array", rt.Kind())) } err := C.H5PTread_packets(t.id, c_start, c_nrecords, c_data) return h5err(err) }