mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 05:12:25 -06:00 
			
		
		
		
	
		
			
	
	
		
			76 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package pools
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"bufio"
							 | 
						||
| 
								 | 
							
									"io"
							 | 
						||
| 
								 | 
							
									"sync"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// BufioReaderPool is a pooled allocator for bufio.Reader objects
							 | 
						||
| 
								 | 
							
								type BufioReaderPool interface {
							 | 
						||
| 
								 | 
							
									// Get fetches a bufio.Reader from pool and resets to supplied reader
							 | 
						||
| 
								 | 
							
									Get(io.Reader) *bufio.Reader
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Put places supplied bufio.Reader back in pool
							 | 
						||
| 
								 | 
							
									Put(*bufio.Reader)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// NewBufioReaderPool returns a newly instantiated bufio.Reader pool
							 | 
						||
| 
								 | 
							
								func NewBufioReaderPool(size int) BufioReaderPool {
							 | 
						||
| 
								 | 
							
									return &bufioReaderPool{
							 | 
						||
| 
								 | 
							
										Pool: sync.Pool{
							 | 
						||
| 
								 | 
							
											New: func() interface{} {
							 | 
						||
| 
								 | 
							
												return bufio.NewReaderSize(nil, size)
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// bufioReaderPool is our implementation of BufioReaderPool
							 | 
						||
| 
								 | 
							
								type bufioReaderPool struct{ sync.Pool }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (p *bufioReaderPool) Get(r io.Reader) *bufio.Reader {
							 | 
						||
| 
								 | 
							
									br := p.Pool.Get().(*bufio.Reader)
							 | 
						||
| 
								 | 
							
									br.Reset(r)
							 | 
						||
| 
								 | 
							
									return br
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (p *bufioReaderPool) Put(br *bufio.Reader) {
							 | 
						||
| 
								 | 
							
									br.Reset(nil)
							 | 
						||
| 
								 | 
							
									p.Pool.Put(br)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// BufioWriterPool is a pooled allocator for bufio.Writer objects
							 | 
						||
| 
								 | 
							
								type BufioWriterPool interface {
							 | 
						||
| 
								 | 
							
									// Get fetches a bufio.Writer from pool and resets to supplied writer
							 | 
						||
| 
								 | 
							
									Get(io.Writer) *bufio.Writer
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Put places supplied bufio.Writer back in pool
							 | 
						||
| 
								 | 
							
									Put(*bufio.Writer)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// NewBufioWriterPool returns a newly instantiated bufio.Writer pool
							 | 
						||
| 
								 | 
							
								func NewBufioWriterPool(size int) BufioWriterPool {
							 | 
						||
| 
								 | 
							
									return &bufioWriterPool{
							 | 
						||
| 
								 | 
							
										Pool: sync.Pool{
							 | 
						||
| 
								 | 
							
											New: func() interface{} {
							 | 
						||
| 
								 | 
							
												return bufio.NewWriterSize(nil, size)
							 | 
						||
| 
								 | 
							
											},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// bufioWriterPool is our implementation of BufioWriterPool
							 | 
						||
| 
								 | 
							
								type bufioWriterPool struct{ sync.Pool }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (p *bufioWriterPool) Get(w io.Writer) *bufio.Writer {
							 | 
						||
| 
								 | 
							
									bw := p.Pool.Get().(*bufio.Writer)
							 | 
						||
| 
								 | 
							
									bw.Reset(w)
							 | 
						||
| 
								 | 
							
									return bw
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func (p *bufioWriterPool) Put(bw *bufio.Writer) {
							 | 
						||
| 
								 | 
							
									bw.Reset(nil)
							 | 
						||
| 
								 | 
							
									p.Pool.Put(bw)
							 | 
						||
| 
								 | 
							
								}
							 |