| 
									
										
										
										
											2024-04-02 11:03:40 +01:00
										 |  |  | 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 { | 
					
						
							| 
									
										
										
										
											2024-06-03 11:03:35 +00:00
										 |  |  | 	return (k.key == o.key) | 
					
						
							| 
									
										
										
										
											2024-04-02 11:03:40 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // 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 { | 
					
						
							| 
									
										
										
										
											2024-06-03 11:03:35 +00:00
										 |  |  | 	return (k.raw == nil) | 
					
						
							| 
									
										
										
										
											2024-04-02 11:03:40 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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) | 
					
						
							|  |  |  | } |