Add string caching example documentation

This commit is contained in:
Feoramund
2024-06-24 15:11:43 -04:00
parent fbd609fa37
commit 8b05ec1765
+42
View File
@@ -111,6 +111,48 @@ constructing a table, you can use `aligned_row_of_values` or
table.aligned_row_of_values(tbl, .Center, "Foo", "Bar") table.aligned_row_of_values(tbl, .Center, "Foo", "Bar")
table.row_of_aligned_values(tbl, {{.Center, "Foo"}, {.Right, "Bar"}}) table.row_of_aligned_values(tbl, {{.Center, "Foo"}, {.Right, "Bar"}})
**Caching Results:**
If you only need to build a table once but display it potentially many times,
it may be more efficient to cache the results of your write into a string.
Here's an example of how you can do that:
package main
import "core:fmt"
import "core:strings"
import "core:text/table"
main :: proc() {
string_buffer := strings.builder_make()
defer strings.builder_destroy(&string_buffer)
{
tbl: table.Table
table.init(&tbl)
defer table.destroy(&tbl)
table.caption(&tbl, "Hellope!")
table.row(&tbl, "Hellope", "World")
builder_writer := strings.to_writer(&string_buffer)
// The written table will be cached into the string builder after this call.
table.write_plain_table(builder_writer, &tbl)
}
// The table is inaccessible, now that we're back in the first-level scope.
// But now the results are stored in the string builder, which can be converted to a string.
my_table_string := strings.to_string(string_buffer)
// Remember that the string's allocated backing data lives in the
// builder and must still be freed.
//
// The deferred call to `builder_destroy` will take care of that for us
// in this simple example.
fmt.println(my_table_string)
}
**Regarding `Width_Procs`:** **Regarding `Width_Procs`:**
If you know ahead of time that all the text you're parsing is ASCII, instead of If you know ahead of time that all the text you're parsing is ASCII, instead of