浏览代码

Updated documentation and examples.

woollybah 6 年之前
父节点
当前提交
01f6670f2e
共有 37 个文件被更改,包括 472 次插入11 次删除
  1. 20 0
      stringbuilder.mod/doc/intro.bbdoc
  2. 36 0
      stringbuilder.mod/doc/tstringbuilder.bmx
  3. 14 0
      stringbuilder.mod/doc/tstringbuilder_append_b.bmx
  4. 15 0
      stringbuilder.mod/doc/tstringbuilder_append_d.bmx
  5. 15 0
      stringbuilder.mod/doc/tstringbuilder_append_f.bmx
  6. 14 0
      stringbuilder.mod/doc/tstringbuilder_append_i.bmx
  7. 12 0
      stringbuilder.mod/doc/tstringbuilder_append_l.bmx
  8. 20 0
      stringbuilder.mod/doc/tstringbuilder_append_object.bmx
  9. 12 0
      stringbuilder.mod/doc/tstringbuilder_append_r.bmx
  10. 13 0
      stringbuilder.mod/doc/tstringbuilder_append_s.bmx
  11. 13 0
      stringbuilder.mod/doc/tstringbuilder_append_t.bmx
  12. 14 0
      stringbuilder.mod/doc/tstringbuilder_append_u.bmx
  13. 13 0
      stringbuilder.mod/doc/tstringbuilder_append_ul.bmx
  14. 13 0
      stringbuilder.mod/doc/tstringbuilder_appendnewline.bmx
  15. 12 0
      stringbuilder.mod/doc/tstringbuilder_appendshorts.bmx
  16. 8 0
      stringbuilder.mod/doc/tstringbuilder_capacity.bmx
  17. 9 0
      stringbuilder.mod/doc/tstringbuilder_charat.bmx
  18. 10 0
      stringbuilder.mod/doc/tstringbuilder_contains.bmx
  19. 9 0
      stringbuilder.mod/doc/tstringbuilder_endswith.bmx
  20. 10 0
      stringbuilder.mod/doc/tstringbuilder_find.bmx
  21. 11 0
      stringbuilder.mod/doc/tstringbuilder_findlast.bmx
  22. 8 0
      stringbuilder.mod/doc/tstringbuilder_left.bmx
  23. 8 0
      stringbuilder.mod/doc/tstringbuilder_length.bmx
  24. 9 0
      stringbuilder.mod/doc/tstringbuilder_operator_iget.bmx
  25. 11 0
      stringbuilder.mod/doc/tstringbuilder_operator_iset.bmx
  26. 10 0
      stringbuilder.mod/doc/tstringbuilder_remove.bmx
  27. 10 0
      stringbuilder.mod/doc/tstringbuilder_replace.bmx
  28. 10 0
      stringbuilder.mod/doc/tstringbuilder_reverse.bmx
  29. 8 0
      stringbuilder.mod/doc/tstringbuilder_right.bmx
  30. 11 0
      stringbuilder.mod/doc/tstringbuilder_setcharat.bmx
  31. 10 0
      stringbuilder.mod/doc/tstringbuilder_setlength.bmx
  32. 10 0
      stringbuilder.mod/doc/tstringbuilder_split.bmx
  33. 9 0
      stringbuilder.mod/doc/tstringbuilder_startswith.bmx
  34. 8 0
      stringbuilder.mod/doc/tstringbuilder_tolower.bmx
  35. 8 0
      stringbuilder.mod/doc/tstringbuilder_toupper.bmx
  36. 10 0
      stringbuilder.mod/doc/tstringbuilder_trim.bmx
  37. 39 11
      stringbuilder.mod/stringbuilder.bmx

+ 20 - 0
stringbuilder.mod/doc/intro.bbdoc

@@ -0,0 +1,20 @@
+This module provides a mutable #String like object, #TStringBuilder.
+
+Unlike with an instance of #String, a #TStringBuilder object can be modified by
+appending, removing, replacing or inserting characters. A #TStringBuilder object
+maintains an internal buffer to efficiently accommodate expansions to the string.
+New text is appended to the buffer there is space available, or a larger buffer is
+allocated and the text copied into the new buffer.
+
+The contents of a #String, on the other hand, cannot be modified, and any manipulation
+of a #String (like adding two strings together) results in the creation of new #String objects.
+
+If you intend to perform extensive string manipulation, you should certainly consider using
+a #TStringBuilder.
+
+> Although #TStringBuilder generally offers better efficiency over #String, you don't
+necessarily want to replace all uses of #String with #TStringBuilder whenever you do
+string manipulation. There are a number of factors - like the size of the string, memory
+allocations, the system you are running on, and the kind of operation - which determine
+whether using a #TStringBuilder offers a significant performance improvement. Try to
+benchmark any changes you make to ensure you are using the best features.

+ 36 - 0
stringbuilder.mod/doc/tstringbuilder.bmx

@@ -0,0 +1,36 @@
+'
+' Append some strings, with basic timing comparison.
+'
+SuperStrict
+
+Framework BRl.StringBuilder
+Import brl.standardio
+
+Const iterations:Int = 20000
+Local ms:Int, nms:Int
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Print "Appending a sequence of " + iterations + " numbers.."
+
+Local s:String
+ms = MilliSecs()
+For Local i:Int = 0 Until iterations
+	s :+ i + " "
+Next
+nms = MilliSecs()
+Print "String concat : " + (nms - ms) + " ms"
+Print "String length = " + s.Length
+
+Print ""
+
+ms = MilliSecs()
+For Local i:Int = 0 Until iterations
+	sb.Append(i).Append(" ")
+Next
+nms = MilliSecs()
+
+Print "StringBuilder concat : " + (nms - ms) + " ms"
+
+Print "StringBuilder String length = " + sb.Length()
+Print "StringBuilder capacity = " + sb.Capacity()

+ 14 - 0
stringbuilder.mod/doc/tstringbuilder_append_b.bmx

@@ -0,0 +1,14 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local bytes:Byte[] = [0, 1, 2, 3, 4, 5]
+
+For Local b:Byte = EachIn bytes
+	sb.Append(b).Append(",")
+Next
+
+Print sb.ToString()

+ 15 - 0
stringbuilder.mod/doc/tstringbuilder_append_d.bmx

@@ -0,0 +1,15 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local x:Double = 35.7
+Local y:Double = 40.1
+
+sb.Append(x)
+sb.Append(", ")
+sb.Append(y)
+
+Print sb.ToString()

+ 15 - 0
stringbuilder.mod/doc/tstringbuilder_append_f.bmx

@@ -0,0 +1,15 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local x:Float = 35.7
+Local y:Float = 40.1
+
+sb.Append(x)
+sb.Append(", ")
+sb.Append(y)
+
+Print sb.ToString()

+ 14 - 0
stringbuilder.mod/doc/tstringbuilder_append_i.bmx

@@ -0,0 +1,14 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local a:Int = 5
+Local b:Int = 6
+
+sb.Append(a).Append(" + ").Append(b)
+sb.Append(" = ").Append(a + b)
+
+Print sb.ToString()

+ 12 - 0
stringbuilder.mod/doc/tstringbuilder_append_l.bmx

@@ -0,0 +1,12 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local num:Long = 100000000:Long * 9876
+sb.Append(num).AppendNewLine()
+sb.Append(num * 99)
+
+Print sb.ToString()

+ 20 - 0
stringbuilder.mod/doc/tstringbuilder_append_object.bmx

@@ -0,0 +1,20 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local t:TMyType = New TMyType
+
+sb.Append(t)
+
+Print sb.ToString()
+
+Type TMyType
+
+	Method ToString:String()
+		Return "Hello World!"
+	End Method
+
+End Type

+ 12 - 0
stringbuilder.mod/doc/tstringbuilder_append_r.bmx

@@ -0,0 +1,12 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+sb.Append("Hello")
+sb.Append(" ")
+sb.Append("World")
+
+Print sb.ToString()

+ 13 - 0
stringbuilder.mod/doc/tstringbuilder_append_s.bmx

@@ -0,0 +1,13 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local x:Short = 100
+Local y:Short = 55
+
+sb.Append(x).Append(", ").Append(y)
+
+Print sb.ToString()

+ 13 - 0
stringbuilder.mod/doc/tstringbuilder_append_t.bmx

@@ -0,0 +1,13 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local s:Size_T = 32684
+
+sb.Append(s).Append(" ^ 2 = ")
+sb.Append(Size_T(s ^ 2))
+
+Print sb.ToString()

+ 14 - 0
stringbuilder.mod/doc/tstringbuilder_append_u.bmx

@@ -0,0 +1,14 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local values:UInt[] = [2, 4, 6, 8, 10]
+
+For Local value:UInt = EachIn values
+	sb.Append(value).AppendNewLine()
+Next
+
+Print sb.ToString()

+ 13 - 0
stringbuilder.mod/doc/tstringbuilder_append_ul.bmx

@@ -0,0 +1,13 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local a:ULong = 900
+Local b:ULong = 7400
+
+sb.Append(a).Append(", ").Append(b)
+
+Print sb.ToString()

+ 13 - 0
stringbuilder.mod/doc/tstringbuilder_appendnewline.bmx

@@ -0,0 +1,13 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+sb.Append("Hello")
+sb.AppendNewLine()
+sb.AppendNewLine()
+sb.Append("World")
+
+Print sb.ToString()

+ 12 - 0
stringbuilder.mod/doc/tstringbuilder_appendshorts.bmx

@@ -0,0 +1,12 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder
+
+Local shorts:Short[] = [65, 66, 67, 68, 69, 70]
+
+sb.AppendShorts(shorts, shorts.length)
+
+Print sb.ToString()

+ 8 - 0
stringbuilder.mod/doc/tstringbuilder_capacity.bmx

@@ -0,0 +1,8 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print sb.Capacity() ' 16

+ 9 - 0
stringbuilder.mod/doc/tstringbuilder_charat.bmx

@@ -0,0 +1,9 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print Chr(sb.CharAt(3)) ' l
+Print Chr(sb.CharAt(6)) ' W

+ 10 - 0
stringbuilder.mod/doc/tstringbuilder_contains.bmx

@@ -0,0 +1,10 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print sb.Contains("z")
+Print sb.Contains("Wo")
+

+ 9 - 0
stringbuilder.mod/doc/tstringbuilder_endswith.bmx

@@ -0,0 +1,9 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print sb.EndsWith("z")
+Print sb.EndsWith("d!")

+ 10 - 0
stringbuilder.mod/doc/tstringbuilder_find.bmx

@@ -0,0 +1,10 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("one two three four five six seven")
+
+Print sb.Find("w") ' 5
+Print sb.Find("z") ' -1
+Print sb.Find("e", 4) ' 11

+ 11 - 0
stringbuilder.mod/doc/tstringbuilder_findlast.bmx

@@ -0,0 +1,11 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("one two three four five six seven")
+
+Print sb.FindLast("w") ' 5
+Print sb.FindLast("z") ' -1
+Print sb.FindLast("w", 30) ' -1 
+

+ 8 - 0
stringbuilder.mod/doc/tstringbuilder_left.bmx

@@ -0,0 +1,8 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print sb.Left(4)

+ 8 - 0
stringbuilder.mod/doc/tstringbuilder_length.bmx

@@ -0,0 +1,8 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print sb.Length() ' 12

+ 9 - 0
stringbuilder.mod/doc/tstringbuilder_operator_iget.bmx

@@ -0,0 +1,9 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print Chr(sb[3])
+Print Chr(sb[6])

+ 11 - 0
stringbuilder.mod/doc/tstringbuilder_operator_iset.bmx

@@ -0,0 +1,11 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+sb[3] = Asc("p")
+sb[4] = Asc(",")
+
+Print sb.ToString()

+ 10 - 0
stringbuilder.mod/doc/tstringbuilder_remove.bmx

@@ -0,0 +1,10 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+sb.Remove(2, 9)
+
+Print sb.ToString()

+ 10 - 0
stringbuilder.mod/doc/tstringbuilder_replace.bmx

@@ -0,0 +1,10 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+sb.Replace("o", "0")
+
+Print sb.ToString()

+ 10 - 0
stringbuilder.mod/doc/tstringbuilder_reverse.bmx

@@ -0,0 +1,10 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+sb.Reverse()
+
+Print sb.ToString()

+ 8 - 0
stringbuilder.mod/doc/tstringbuilder_right.bmx

@@ -0,0 +1,8 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print sb.Right(4)

+ 11 - 0
stringbuilder.mod/doc/tstringbuilder_setcharat.bmx

@@ -0,0 +1,11 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+sb.SetCharAt(3, Asc("p"))
+sb.SetCharAt(4, Asc(","))
+
+Print sb.ToString()

+ 10 - 0
stringbuilder.mod/doc/tstringbuilder_setlength.bmx

@@ -0,0 +1,10 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+sb.SetLength(5)
+
+Print sb.ToString()

+ 10 - 0
stringbuilder.mod/doc/tstringbuilder_split.bmx

@@ -0,0 +1,10 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("1,2,3,4,5,6,7,8,9,10")
+
+For Local s:String = EachIn sb.Split(",")
+	Print s
+Next

+ 9 - 0
stringbuilder.mod/doc/tstringbuilder_startswith.bmx

@@ -0,0 +1,9 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print sb.StartsWith("he")
+Print sb.StartsWith("He")

+ 8 - 0
stringbuilder.mod/doc/tstringbuilder_tolower.bmx

@@ -0,0 +1,8 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print sb.ToLower().ToString()

+ 8 - 0
stringbuilder.mod/doc/tstringbuilder_toupper.bmx

@@ -0,0 +1,8 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("Hello World!")
+
+Print sb.ToUpper().ToString()

+ 10 - 0
stringbuilder.mod/doc/tstringbuilder_trim.bmx

@@ -0,0 +1,10 @@
+SuperStrict
+
+Framework BRL.StringBuilder
+Import brl.standardio
+
+Local sb:TStringBuilder = New TStringBuilder("  Hello World!~t~t ")
+
+sb.Trim()
+
+Print sb.ToString()

+ 39 - 11
stringbuilder.mod/stringbuilder.bmx

@@ -170,17 +170,21 @@ Public
 	TStringBuilder objects are simply mem-copied.
 	TStringBuilder objects are simply mem-copied.
 	End Rem
 	End Rem
 	Method Append:TStringBuilder(obj:Object)
 	Method Append:TStringBuilder(obj:Object)
-		If TStringBuilder(obj) Then
-			bmx_stringbuilder_append_stringbuffer(buffer, TStringBuilder(obj).buffer)
+		If obj Then
+			bmx_stringbuilder_append_string(buffer, obj.ToString())
 		Else
 		Else
-			If obj Then
-				bmx_stringbuilder_append_string(buffer, obj.ToString())
-			Else
-				Return AppendNull()
-			End If
+			Return AppendNull()
 		End If
 		End If
 		Return Self
 		Return Self
 	End Method
 	End Method
+
+	Rem
+	bbdoc: Appends a #TStringBuilder onto the string builder.
+	End Rem
+	Method Append:TStringBuilder(sb:TStringBuilder)
+		bmx_stringbuilder_append_stringbuffer(buffer, sb.buffer)
+		Return Self
+	End Method
 	
 	
 	Rem
 	Rem
 	bbdoc: Appends a null-terminated C string onto the string builder.
 	bbdoc: Appends a null-terminated C string onto the string builder.
@@ -421,6 +425,18 @@ Public
 		Return bmx_stringbuilder_charat(buffer, index)
 		Return bmx_stringbuilder_charat(buffer, index)
 	End Method
 	End Method
 	
 	
+	Rem
+	bbdoc: Returns the char value in the buffer at the specified index.
+	about: The first char value is at index 0, the next at index 1, and so on, as in array indexing.
+	@index must be greater than or equal to 0, and less than the length of the buffer.
+	End Rem
+	Method Operator[]:Int(index:Int)
+?debug
+		If index < 0 Or index >= Length() Throw New TArrayBoundsException
+?
+		Return bmx_stringbuilder_charat(buffer, index)
+	End Method
+	
 	Rem
 	Rem
 	bbdoc: Returns true if string contains @subString.
 	bbdoc: Returns true if string contains @subString.
 	End Rem
 	End Rem
@@ -505,6 +521,17 @@ Public
 		bmx_stringbuilder_setcharat(buffer, index, char)
 		bmx_stringbuilder_setcharat(buffer, index, char)
 	End Method
 	End Method
 	
 	
+	Rem
+	bbdoc: The character at the specified index is set to @char.
+	about: @index must be greater than or equal to 0, and less than the length of the buffer.
+	End Rem
+	Method Operator []= (index:Int, char:Int)
+?debug
+		If index < 0 Or index >= Length() Throw New TArrayBoundsException
+?
+		bmx_stringbuilder_setcharat(buffer, index, char)
+	End Method
+	
 	Rem
 	Rem
 	bbdoc: Sets the text to be appended when a new line is added.
 	bbdoc: Sets the text to be appended when a new line is added.
 	End Rem
 	End Rem
@@ -532,7 +559,8 @@ Public
 	End Method
 	End Method
 	
 	
 	Rem
 	Rem
-	bbdoc: 
+	bbdoc: Creates a split buffer using the specified separator.
+	about: The #TSplitBuffer can be used to iterate over the split text.
 	End Rem
 	End Rem
 	Method Split:TSplitBuffer(separator:String)
 	Method Split:TSplitBuffer(separator:String)
 		Local buf:TSplitBuffer = New TSplitBuffer
 		Local buf:TSplitBuffer = New TSplitBuffer
@@ -559,13 +587,14 @@ End Type
 
 
 Rem
 Rem
 bbdoc: An array of split text from a TStringBuilder.
 bbdoc: An array of split text from a TStringBuilder.
-about: Note that the TSplitBuffer is only valid while its parent TStringBuilder is unchanged.
+about: Note that the #TSplitBuffer is only valid while its parent TStringBuilder is unchanged.
 Once you modify the TStringBuffer you should call Split() again.
 Once you modify the TStringBuffer you should call Split() again.
 End Rem
 End Rem
 Type TSplitBuffer
 Type TSplitBuffer
+Private
 	Field buffer:TStringBuilder
 	Field buffer:TStringBuilder
 	Field splitPtr:Byte Ptr
 	Field splitPtr:Byte Ptr
-	
+Public
 	Rem
 	Rem
 	bbdoc: The number of split elements.
 	bbdoc: The number of split elements.
 	End Rem
 	End Rem
@@ -621,4 +650,3 @@ Type TSplitBufferEnum
 	End Method
 	End Method
 
 
 End Type
 End Type
-