38 lines
526 B
Go
38 lines
526 B
Go
package native
|
|
|
|
import (
|
|
"io"
|
|
"sync"
|
|
)
|
|
|
|
type writerTable struct {
|
|
nextIndex int
|
|
table map[int]io.Writer
|
|
mutex sync.Mutex
|
|
}
|
|
|
|
func (bt *writerTable) Add(writer io.Writer) (index int) {
|
|
bt.mutex.Lock()
|
|
defer bt.mutex.Unlock()
|
|
|
|
if bt.table == nil {
|
|
bt.table = map[int]io.Writer{}
|
|
}
|
|
|
|
index = bt.nextIndex
|
|
bt.table[index] = writer
|
|
|
|
// TODO - Handle int overflow
|
|
|
|
bt.nextIndex++
|
|
|
|
return
|
|
}
|
|
|
|
func (bt *writerTable) Get(index int) io.Writer {
|
|
bt.mutex.Lock()
|
|
defer bt.mutex.Unlock()
|
|
|
|
return bt.table[index]
|
|
}
|