1 Commits

Author SHA1 Message Date
9553f87292 Merge pull request 'basic functionality and docs' (#1) from dev-docs into master
Reviewed-on: #1
2021-02-01 11:52:54 +00:00

View File

@@ -1,4 +1,3 @@
//Package multireader provides capability for single writer to multiple reader
package multireader
import (
@@ -34,7 +33,6 @@ type Reader struct {
closed bool
}
//MultiReader initialize new MultiReader object. The object also implements WriteCloser.
func NewMultiReader(len int) *MultiReader {
if len < 0 {
len = 0
@@ -53,7 +51,6 @@ func NewMultiReader(len int) *MultiReader {
}
}
// Write implements Writer interface. The function will not return error. Error return only satisfy the interface.
func (m *MultiReader) Write(data []byte) (int, error) {
m.mtx.Lock()
defer m.mtx.Unlock()
@@ -119,7 +116,6 @@ func (m *MultiReader) removeReader(id int) {
m.pos = nb
}
// Close will not return error. The error return only satisfy the interface signature.
func (m *MultiReader) Close() error {
m.mtx.Lock()
defer m.mtx.Unlock()
@@ -127,7 +123,6 @@ func (m *MultiReader) Close() error {
return nil
}
// NewReader initialize new Reader object. The object implements ReadCloser and Seeker interface.
func (m *MultiReader) NewReader() *Reader {
m.mtx.Lock()
defer m.mtx.Unlock()
@@ -146,8 +141,6 @@ func (m *MultiReader) NewReader() *Reader {
return reader
}
// Read implements Reader interface. If the reader reached the same position with the writer. It will wait.
// Calling Read() is the same with calling WaitAvailable(), ReadAhead(), and Seek()
func (r *Reader) Read(data []byte) (int, error) {
r.mtx.Lock()
defer r.mtx.Unlock()
@@ -191,8 +184,6 @@ func (r *Reader) seek(offset int, whence int) (int, error) {
return r.readPos, nil
}
// Seek implements Seeker interface. The underlying function will move the reader position.
// It only returns error when the whence parameter is not in io.SeekStart, io.SeekCurrent, io.SeekEnd
func (r *Reader) Seek(offset int64, whence int) (int64, error) {
n, err := r.seek(int(offset), whence)
return int64(n), err
@@ -212,7 +203,6 @@ func (r *Reader) readAhead(data []byte) (int, error) {
return len(data), nil
}
// ReadAhead reads buffer ahead of current position without moving the reader position.
func (r *Reader) ReadAhead(data []byte) (int, error) {
r.mtx.Lock()
defer r.mtx.Unlock()
@@ -233,14 +223,12 @@ func (r *Reader) waitAvailable() (int, error) {
return r.multiReader.lastWritePos - r.readPos, nil
}
// WaitAvailable will only wait when Reader position reached Writer position.
func (r *Reader) WaitAvailable() (int, error) {
r.mtx.Lock()
defer r.mtx.Unlock()
return r.waitAvailable()
}
// Close implements ReadCloser interface. It will not return error.
func (r *Reader) Close() error {
r.mtx.Lock()
defer r.mtx.Unlock()