pools.go raw

   1  //
   2  // Copyright 2024 CloudWeGo Authors
   3  //
   4  // Licensed under the Apache License, Version 2.0 (the "License");
   5  // you may not use this file except in compliance with the License.
   6  // You may obtain a copy of the License at
   7  //
   8  //     http://www.apache.org/licenses/LICENSE-2.0
   9  //
  10  // Unless required by applicable law or agreed to in writing, software
  11  // distributed under the License is distributed on an "AS IS" BASIS,
  12  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13  // See the License for the specific language governing permissions and
  14  // limitations under the License.
  15  //
  16  
  17  package expr
  18  
  19  import (
  20  	"sync"
  21  )
  22  
  23  var (
  24  	expressionPool sync.Pool
  25  )
  26  
  27  func newExpression() *Expr {
  28  	if v := expressionPool.Get(); v == nil {
  29  		return new(Expr)
  30  	} else {
  31  		return resetExpression(v.(*Expr))
  32  	}
  33  }
  34  
  35  func freeExpression(p *Expr) {
  36  	expressionPool.Put(p)
  37  }
  38  
  39  func resetExpression(p *Expr) *Expr {
  40  	*p = Expr{}
  41  	return p
  42  }
  43