package msgpack

import (
	
	
)

var cachedValues struct {
	m map[reflect.Type]chan reflect.Value
	sync.RWMutex
}

func cachedValue( reflect.Type) reflect.Value {
	cachedValues.RLock()
	 := cachedValues.m[]
	cachedValues.RUnlock()
	if  != nil {
		return <-
	}

	cachedValues.Lock()
	defer cachedValues.Unlock()
	if  = cachedValues.m[];  != nil {
		return <-
	}

	 = make(chan reflect.Value, 256)
	go func() {
		for {
			 <- reflect.New()
		}
	}()
	if cachedValues.m == nil {
		cachedValues.m = make(map[reflect.Type]chan reflect.Value, 8)
	}
	cachedValues.m[] = 
	return <-
}

func ( *Decoder) ( reflect.Type) reflect.Value {
	if .flags&usePreallocateValues == 0 {
		return reflect.New()
	}

	return cachedValue()
}