mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 09:32:25 -06:00 
			
		
		
		
	
		
			
	
	
		
			59 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package structr
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"sync"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									"codeberg.org/gruf/go-byteutil"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Key represents one key to
							 | 
						||
| 
								 | 
							
								// lookup (potentially) stored
							 | 
						||
| 
								 | 
							
								// entries in an Index.
							 | 
						||
| 
								 | 
							
								type Key struct {
							 | 
						||
| 
								 | 
							
									raw []any
							 | 
						||
| 
								 | 
							
									key string
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Key returns the underlying cache key string.
							 | 
						||
| 
								 | 
							
								// NOTE: this will not be log output friendly.
							 | 
						||
| 
								 | 
							
								func (k Key) Key() string {
							 | 
						||
| 
								 | 
							
									return k.key
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Equal returns whether keys are equal.
							 | 
						||
| 
								 | 
							
								func (k Key) Equal(o Key) bool {
							 | 
						||
| 
								 | 
							
									return k.key == o.key
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Value returns the raw slice of
							 | 
						||
| 
								 | 
							
								// values that comprise this Key.
							 | 
						||
| 
								 | 
							
								func (k Key) Values() []any {
							 | 
						||
| 
								 | 
							
									return k.raw
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Zero indicates a zero value key.
							 | 
						||
| 
								 | 
							
								func (k Key) Zero() bool {
							 | 
						||
| 
								 | 
							
									return k.raw == nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var buf_pool sync.Pool
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// new_buffer returns a new initialized byte buffer.
							 | 
						||
| 
								 | 
							
								func new_buffer() *byteutil.Buffer {
							 | 
						||
| 
								 | 
							
									v := buf_pool.Get()
							 | 
						||
| 
								 | 
							
									if v == nil {
							 | 
						||
| 
								 | 
							
										buf := new(byteutil.Buffer)
							 | 
						||
| 
								 | 
							
										buf.B = make([]byte, 0, 512)
							 | 
						||
| 
								 | 
							
										v = buf
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return v.(*byteutil.Buffer)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// free_buffer releases the byte buffer.
							 | 
						||
| 
								 | 
							
								func free_buffer(buf *byteutil.Buffer) {
							 | 
						||
| 
								 | 
							
									if cap(buf.B) > int(^uint16(0)) {
							 | 
						||
| 
								 | 
							
										return // drop large bufs
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									buf_pool.Put(buf)
							 | 
						||
| 
								 | 
							
								}
							 |