summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Sam Atman2025-04-29 13:48:34 -0400
committerGravatar Sam Atman2025-04-29 13:48:34 -0400
commit9ed545ae37dfd1db9758d724e5d10bae5cc00f04 (patch)
tree2ac1c8b198c4114ad6edfcb67cd96224e53001c6 /src
parentREADME.md was updated to reflect last changes in API. (diff)
downloadzg-9ed545ae37dfd1db9758d724e5d10bae5cc00f04.tar.gz
zg-9ed545ae37dfd1db9758d724e5d10bae5cc00f04.tar.xz
zg-9ed545ae37dfd1db9758d724e5d10bae5cc00f04.zip
Add result.toOwned() to Normalize.zig
Closes #29 The README is also updated to reflect this change.
Diffstat (limited to 'src')
-rw-r--r--src/Normalize.zig9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/Normalize.zig b/src/Normalize.zig
index 7b87406..97c2649 100644
--- a/src/Normalize.zig
+++ b/src/Normalize.zig
@@ -220,10 +220,19 @@ test "decompose" {
220} 220}
221 221
222/// Returned from various functions in this namespace. Remember to call `deinit` to free any allocated memory. 222/// Returned from various functions in this namespace. Remember to call `deinit` to free any allocated memory.
223/// Note that normalization functions will not copy what they're given if no normalization is needed, if you
224/// need to ensure that this Result outlasts the given string, call `try result.toOwned(allocator)`. This
225/// will not make a third copy if the Result is already copied from the input.
223pub const Result = struct { 226pub const Result = struct {
224 allocated: bool = false, 227 allocated: bool = false,
225 slice: []const u8, 228 slice: []const u8,
226 229
230 /// Ensures that the slice result is a copy of the input, by making a copy if it was not.
231 pub fn toOwned(result: Result, allocator: mem.Allocator) error{OutOfMemory}!Result {
232 if (result.allocatod) return result;
233 return .{ .allocated = true, .slice = try allocator.dupe(u8, result.slice) };
234 }
235
227 pub fn deinit(self: *const Result, allocator: mem.Allocator) void { 236 pub fn deinit(self: *const Result, allocator: mem.Allocator) void {
228 if (self.allocated) allocator.free(self.slice); 237 if (self.allocated) allocator.free(self.slice);
229 } 238 }