// Copyright 2025+ Klaus Post. All rights reserved.
// License information can be found in the LICENSE file.

//go:build go1.24

package zstd

import (
	
	
	
	
)

var weakMu sync.Mutex
var simpleEnc weak.Pointer[Encoder]
var simpleDec weak.Pointer[Decoder]

// EncodeTo appends the encoded data from src to dst.
func ( []byte,  []byte) []byte {
	weakMu.Lock()
	 := simpleEnc.Value()
	if  == nil {
		var  error
		,  = NewWriter(nil, WithEncoderConcurrency(runtime.NumCPU()), WithWindowSize(1<<20), WithLowerEncoderMem(true), WithZeroFrames(true))
		if  != nil {
			panic("failed to create simple encoder: " + .Error())
		}
		simpleEnc = weak.Make()
	}
	weakMu.Unlock()

	return .EncodeAll(, )
}

// DecodeTo appends the decoded data from src to dst.
// The maximum decoded size is 1GiB,
// not including what may already be in dst.
func ( []byte,  []byte) ([]byte, error) {
	weakMu.Lock()
	 := simpleDec.Value()
	if  == nil {
		var  error
		,  = NewReader(nil, WithDecoderConcurrency(runtime.NumCPU()), WithDecoderLowmem(true), WithDecoderMaxMemory(1<<30))
		if  != nil {
			weakMu.Unlock()
			return nil, errors.New("failed to create simple decoder: " + .Error())
		}
		runtime.SetFinalizer(, func( *Decoder) {
			.Close()
		})
		simpleDec = weak.Make()
	}
	weakMu.Unlock()
	return .DecodeAll(, )
}