9fans.net/go@v0.0.7/cmd/acme/internal/bufs/buf.go (about)

     1  package bufs
     2  
     3  import (
     4  	"sync"
     5  
     6  	"9fans.net/go/cmd/acme/internal/runes"
     7  )
     8  
     9  const Len = 32 * 1024
    10  const RuneLen = Len / runes.RuneSize
    11  
    12  var runesPool = sync.Pool{
    13  	New: func() interface{} { return make([]rune, RuneLen) },
    14  }
    15  
    16  func AllocRunes() []rune {
    17  	return runesPool.Get().([]rune)
    18  }
    19  
    20  func FreeRunes(buf []rune) {
    21  	if cap(buf) != RuneLen {
    22  		panic("FreeRunes: wrong size")
    23  	}
    24  	runesPool.Put(buf[:RuneLen])
    25  }
    26  
    27  var bytesPool = sync.Pool{
    28  	New: func() interface{} { return make([]byte, Len) },
    29  }
    30  
    31  func AllocBytes() []byte {
    32  	return bytesPool.Get().([]byte)
    33  }
    34  
    35  func FreeBytes(buf []byte) {
    36  	if cap(buf) != Len {
    37  		panic("FreeRunes: wrong size")
    38  	}
    39  	bytesPool.Put(buf[:Len])
    40  }