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]
|
||
|
}
|