mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 00:32:24 -06:00 
			
		
		
		
	
		
			
	
	
		
			47 lines
		
	
	
	
		
			944 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
	
		
			944 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package pools
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"sync"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									"codeberg.org/gruf/go-fastpath"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// PathBuilderPool is a pooled allocator for fastpath.Builder objects
							 | 
						||
| 
								 | 
							
								type PathBuilderPool interface {
							 | 
						||
| 
								 | 
							
									// Get fetches a fastpath.Builder from pool
							 | 
						||
| 
								 | 
							
									Get() *fastpath.Builder
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Put places supplied fastpath.Builder back in pool
							 | 
						||
| 
								 | 
							
									Put(*fastpath.Builder)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// NewPathBuilderPool returns a newly instantiated fastpath.Builder pool
							 | 
						||
| 
								 | 
							
								func NewPathBuilderPool(size int) PathBuilderPool {
							 | 
						||
| 
								 | 
							
									return &pathBuilderPool{
							 | 
						||
| 
								 | 
							
										pool: sync.Pool{
							 | 
						||
| 
								 | 
							
											New: func() interface{} {
							 | 
						||
| 
								 | 
							
												return &fastpath.Builder{B: make([]byte, 0, size)}
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										size: size,
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// pathBuilderPool is our implementation of PathBuilderPool
							 | 
						||
| 
								 | 
							
								type pathBuilderPool struct {
							 | 
						||
| 
								 | 
							
									pool sync.Pool
							 | 
						||
| 
								 | 
							
									size int
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (p *pathBuilderPool) Get() *fastpath.Builder {
							 | 
						||
| 
								 | 
							
									return p.pool.Get().(*fastpath.Builder)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (p *pathBuilderPool) Put(pb *fastpath.Builder) {
							 | 
						||
| 
								 | 
							
									if pb.Cap() < p.size {
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									pb.Reset()
							 | 
						||
| 
								 | 
							
									p.pool.Put(pb)
							 | 
						||
| 
								 | 
							
								}
							 |