package logsql

import (
	"bufio"
	"io"
	"sync"
)

func getBufferedWriter(w io.Writer) *bufferedWriter {
	v := bufferedWriterPool.Get()
	if v == nil {
		return &bufferedWriter{
			bw: bufio.NewWriter(w),
		}
	}
	bw := v.(*bufferedWriter)
	bw.bw.Reset(w)
	return bw
}

func putBufferedWriter(bw *bufferedWriter) {
	bw.reset()
	bufferedWriterPool.Put(bw)
}

var bufferedWriterPool sync.Pool

type bufferedWriter struct {
	mu sync.Mutex
	bw *bufio.Writer
}

func (bw *bufferedWriter) reset() {
	// nothing to do
}

func (bw *bufferedWriter) WriteIgnoreErrors(p []byte) {
	bw.mu.Lock()
	_, _ = bw.bw.Write(p)
	bw.mu.Unlock()
}

func (bw *bufferedWriter) FlushIgnoreErrors() {
	bw.mu.Lock()
	_ = bw.bw.Flush()
	bw.mu.Unlock()
}