github.com/ssetin/penguincast@v0.2.0/src/server/pool.go (about)

     1  // Package iceserver - icecast streaming server
     2  package iceserver
     3  
     4  import (
     5  	"errors"
     6  	"sync"
     7  )
     8  
     9  // PoolManager ...
    10  type PoolManager struct {
    11  	pages map[int]*sync.Pool
    12  }
    13  
    14  // Init ...
    15  func (p *PoolManager) Init(size int) *sync.Pool {
    16  
    17  	if p.pages == nil {
    18  		p.pages = make(map[int]*sync.Pool)
    19  	}
    20  
    21  	if pool, ok := p.pages[size]; ok {
    22  		return pool
    23  	}
    24  
    25  	p.pages[size] = &sync.Pool{
    26  		New: func() interface{} {
    27  			return make([]byte, size)
    28  		},
    29  	}
    30  
    31  	return p.pages[size]
    32  }
    33  
    34  // GetPool ...
    35  func (p *PoolManager) GetPool(size int) (*sync.Pool, error) {
    36  	if pool, ok := p.pages[size]; ok {
    37  		return pool, nil
    38  	}
    39  	return nil, errors.New("No pool according to that size. You have to initialize it")
    40  }