Bläddra i källkod

Added a string builder Hash() method.

Brucey 5 år sedan
förälder
incheckning
9e5b8db253

+ 1 - 0
stringbuilder.mod/common.bmx

@@ -79,6 +79,7 @@ Extern
 	Function bmx_stringbuilder_format_float(buffer:Byte Ptr, formatText:String, value:Float)
 	Function bmx_stringbuilder_format_double(buffer:Byte Ptr, formatText:String, value:Double)
 	Function bmx_stringbuilder_equals:Int(buffer:Byte Ptr, other:Byte Ptr)
+	Function bmx_stringbuilder_hash:ULong(buffer:Byte Ptr)
 
 	Function bmx_stringbuilder_splitbuffer_length:Int(splitPtr:Byte Ptr)
 	Function bmx_stringbuilder_splitbuffer_text:String(splitPtr:Byte Ptr, index:Int)

+ 4 - 0
stringbuilder.mod/glue.c

@@ -851,6 +851,10 @@ void bmx_stringbuilder_format_double(struct MaxStringBuilder * buf, BBString * f
 	bmx_stringbuilder_append_utf8string(buf, buffer);
 }
 
+BBULONG bmx_stringbuilder_hash(struct MaxStringBuilder * buf) {
+	return XXH3_64bits(buf->buffer, buf->count * sizeof(BBChar));
+}
+
 /* ----------------------------------------------------- */
 
 int bmx_stringbuilder_splitbuffer_length(struct MaxSplitBuffer * buf) {

+ 1 - 0
stringbuilder.mod/glue.h

@@ -96,6 +96,7 @@ void bmx_stringbuilder_format_ulong(struct MaxStringBuilder * buf, BBString * fo
 void bmx_stringbuilder_format_sizet(struct MaxStringBuilder * buf, BBString * formatText, BBSIZET value);
 void bmx_stringbuilder_format_float(struct MaxStringBuilder * buf, BBString * formatText, float value);
 void bmx_stringbuilder_format_double(struct MaxStringBuilder * buf, BBString * formatText, double value);
+BBULONG bmx_stringbuilder_hash(struct MaxStringBuilder * buf);
 
 /* ----------------------------------------------------- */
 

+ 10 - 1
stringbuilder.mod/stringbuilder.bmx

@@ -23,10 +23,12 @@ bbdoc: A string builder.
 End Rem	
 Module BRL.StringBuilder
 
-ModuleInfo "Version: 1.13"
+ModuleInfo "Version: 1.14"
 ModuleInfo "License: zlib/libpng"
 ModuleInfo "Copyright: 2018-2020 Bruce A Henderson"
 
+ModuleInfo "History: 1.14"
+ModuleInfo "History: Added Hash() method."
 ModuleInfo "History: 1.13"
 ModuleInfo "History: Changes for low-level external use - header, exposing buffer."
 ModuleInfo "History: 1.12"
@@ -598,6 +600,13 @@ Public
 		Return Self
 	End Method
 
+	Rem
+	bbdoc: Returns the calculated hash for the content of the string builder.
+	End Rem
+	Method Hash:ULong()
+		Return bmx_stringbuilder_hash(buffer)
+	End Method
+	
 	Rem
 	bbdoc: Extracts the leftmost characters from the string builder.
 	about: This method extracts the left @length characters from the builder. If this many characters are not available, the whole builder is returned.