URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [io/] [multi.go] - Rev 747
Compare with Previous | Blame | View Log
// Copyright 2010 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package iotype multiReader struct {readers []Reader}func (mr *multiReader) Read(p []byte) (n int, err error) {for len(mr.readers) > 0 {n, err = mr.readers[0].Read(p)if n > 0 || err != EOF {if err == EOF {// Don't return EOF yet. There may be more bytes// in the remaining readers.err = nil}return}mr.readers = mr.readers[1:]}return 0, EOF}// MultiReader returns a Reader that's the logical concatenation of// the provided input readers. They're read sequentially. Once all// inputs are drained, Read will return EOF.func MultiReader(readers ...Reader) Reader {return &multiReader{readers}}type multiWriter struct {writers []Writer}func (t *multiWriter) Write(p []byte) (n int, err error) {for _, w := range t.writers {n, err = w.Write(p)if err != nil {return}if n != len(p) {err = ErrShortWritereturn}}return len(p), nil}// MultiWriter creates a writer that duplicates its writes to all the// provided writers, similar to the Unix tee(1) command.func MultiWriter(writers ...Writer) Writer {return &multiWriter{writers}}
