Application Context Implementation #4
							
								
								
									
										29
									
								
								src/ona/utf8.zig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/ona/utf8.zig
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					const std = @import("std");
 | 
				
			||||||
 | 
					const table = @import("./table.zig");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// Tests if the contents of `this_utf8_sequence` lexically equals the contents of
 | 
				
			||||||
 | 
					/// `that_utf8_sequence`.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					pub fn equals(this_utf8_sequence: []const u8, that_utf8_sequence: []const u8) bool {
 | 
				
			||||||
 | 
					    return std.mem.eql(u8, this_utf8_sequence, that_utf8_sequence);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// Returns a deterministic hash for `utf8_sequence`.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					pub fn hash(utf8_sequence: []const u8) usize {
 | 
				
			||||||
 | 
					    var utf8_hash = @as(usize, 5381);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (utf8_sequence) |utf8_code| utf8_hash = ((utf8_hash << 5) + utf8_hash) + utf8_code;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return utf8_hash;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// A [table.KeyContext] for handling UTF-8 character sequences.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					pub const key_context = table.KeyContext([]const u8){
 | 
				
			||||||
 | 
					    .hash = hash,
 | 
				
			||||||
 | 
					    .equals = equals,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user