mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 14:12:26 -05: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) | ||
|  | } |