package font

import (
	
	
	
)

// Pool compressor workspace, never font inputs or completed WOFF output.
// Large custom-font tables must not increase the retained output buffer size.
const maxRetainedWoffBuffer = 64 << 10

type woffCompression struct {
	buffer bytes.Buffer
	writer *zlib.Writer
}

var woffCompressionPool = sync.Pool{
	New: func() any { return new(woffCompression) },
}

func acquireWoffCompression() *woffCompression {
	return woffCompressionPool.Get().(*woffCompression)
}

func releaseWoffCompression( *woffCompression) {
	resetWoffCompression()
	woffCompressionPool.Put()
}

func resetWoffCompression( *woffCompression) {
	if .buffer.Cap() > maxRetainedWoffBuffer {
		.buffer = bytes.Buffer{}
	} else {
		.buffer.Reset()
		clear(.buffer.Bytes()[:.buffer.Cap()])
	}
}

// compressTable starts an independent zlib stream, retaining only the working buffers.
// The returned bytes must be copied before another table or release.
func ( *woffCompression) ( []byte) []byte {
	.buffer.Reset()
	if .writer == nil {
		.writer = zlib.NewWriter(&.buffer)
	} else {
		.writer.Reset(&.buffer)
	}
	.writer.Write()
	.writer.Flush()
	.writer.Close()
	return .buffer.Bytes()
}