github.com/mithrandie/csvq@v1.18.1/lib/value/pool.go (about)

     1  package value
     2  
     3  import (
     4  	"sync"
     5  )
     6  
     7  var stringPool = &sync.Pool{
     8  	New: func() interface{} {
     9  		return &String{}
    10  	},
    11  }
    12  
    13  var integerPool = &sync.Pool{
    14  	New: func() interface{} {
    15  		return &Integer{}
    16  	},
    17  }
    18  
    19  var floatPool = &sync.Pool{
    20  	New: func() interface{} {
    21  		return &Float{}
    22  	},
    23  }
    24  
    25  var datetimePool = &sync.Pool{
    26  	New: func() interface{} {
    27  		return &Datetime{}
    28  	},
    29  }
    30  
    31  func getString() *String {
    32  	return stringPool.Get().(*String)
    33  }
    34  
    35  func getInteger() *Integer {
    36  	return integerPool.Get().(*Integer)
    37  }
    38  
    39  func getFloat() *Float {
    40  	return floatPool.Get().(*Float)
    41  }
    42  
    43  func getDatetime() *Datetime {
    44  	return datetimePool.Get().(*Datetime)
    45  }
    46  
    47  func Discard(p Primary) {
    48  	if p != nil {
    49  		switch p.(type) {
    50  		case *String:
    51  			stringPool.Put(p)
    52  		case *Integer:
    53  			integerPool.Put(p)
    54  		case *Float:
    55  			floatPool.Put(p)
    56  		case *Datetime:
    57  			datetimePool.Put(p)
    58  		}
    59  	}
    60  }