gitee.com/zhongguo168a/gocodes@v0.0.0-20230609140523-e1828349603f/myx/pool/poolmap.go (about)

     1  package pool
     2  
     3  func NewPoolMap() (obj *PoolMap) {
     4  	obj = &PoolMap{
     5  		data: map[string]*Pool{},
     6  	}
     7  	return
     8  }
     9  
    10  type PoolMap struct {
    11  	data map[string]*Pool
    12  }
    13  
    14  func (m *PoolMap) getPool(key string) *Pool {
    15  	p, ok := m.data[key]
    16  	if ok == false {
    17  		p = NewPool()
    18  		m.data[key] = p
    19  	}
    20  
    21  	return p
    22  }
    23  func (m *PoolMap) Count(key string) int {
    24  	return m.getPool(key).count
    25  }
    26  func (m *PoolMap) Dispose() {
    27  	for _, val := range m.data {
    28  		val.Dispose()
    29  	}
    30  
    31  	m.data = nil
    32  }
    33  
    34  func (m *PoolMap) Get(key string) interface{} {
    35  	return m.getPool(key).GetItem()
    36  }
    37  
    38  func (m *PoolMap) GetOrNew(key string, args ...interface{}) interface{} {
    39  	return m.getPool(key).GetOrNewItem(args...)
    40  }
    41  
    42  func (m *PoolMap) Put(key string, item interface{}) {
    43  	m.getPool(key).PutItem(item)
    44  }
    45  
    46  func (m *PoolMap) RegisterPool(key string, creator func(...interface{}) interface{}) {
    47  	p := m.getPool(key)
    48  	p.creator = creator
    49  }