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 }