summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clap.zig23
1 files changed, 11 insertions, 12 deletions
diff --git a/clap.zig b/clap.zig
index 00f195b..516426d 100644
--- a/clap.zig
+++ b/clap.zig
@@ -84,7 +84,7 @@ pub fn parseParams(allocator: std.mem.Allocator, str: []const u8) ![]Param(Help)
84/// Takes a string and parses it into many Param(Help). Returned is a newly allocated slice 84/// Takes a string and parses it into many Param(Help). Returned is a newly allocated slice
85/// containing all the parsed params. The caller is responsible for freeing the slice. 85/// containing all the parsed params. The caller is responsible for freeing the slice.
86pub fn parseParamsEx(allocator: std.mem.Allocator, str: []const u8, end: *usize) ![]Param(Help) { 86pub fn parseParamsEx(allocator: std.mem.Allocator, str: []const u8, end: *usize) ![]Param(Help) {
87 var list = std.ArrayList(Param(Help)){}; 87 var list: std.ArrayList(Param(Help)) = .empty;
88 errdefer list.deinit(allocator); 88 errdefer list.deinit(allocator);
89 89
90 try parseParamsIntoArrayListEx(allocator, &list, str, end); 90 try parseParamsIntoArrayListEx(allocator, &list, str, end);
@@ -131,13 +131,8 @@ fn countParams(str: []const u8) usize {
131/// is returned, containing all the parameters parsed. This function will fail if the input slice 131/// is returned, containing all the parameters parsed. This function will fail if the input slice
132/// is to small. 132/// is to small.
133pub fn parseParamsIntoSlice(slice: []Param(Help), str: []const u8) ![]Param(Help) { 133pub fn parseParamsIntoSlice(slice: []Param(Help), str: []const u8) ![]Param(Help) {
134 var list = std.ArrayList(Param(Help)){ 134 var end: usize = undefined;
135 .items = slice[0..0], 135 return parseParamsIntoSliceEx(slice, str, &end);
136 .capacity = slice.len,
137 };
138
139 try parseParamsIntoArrayList(&list, str);
140 return list.items;
141} 136}
142 137
143/// Takes a string and parses it into many Param(Help), which are written to `slice`. A subslice 138/// Takes a string and parses it into many Param(Help), which are written to `slice`. A subslice
@@ -155,9 +150,13 @@ pub fn parseParamsIntoSliceEx(slice: []Param(Help), str: []const u8, end: *usize
155} 150}
156 151
157/// Takes a string and parses it into many Param(Help), which are appended onto `list`. 152/// Takes a string and parses it into many Param(Help), which are appended onto `list`.
158pub fn parseParamsIntoArrayList(list: *std.ArrayList(Param(Help)), str: []const u8) !void { 153/// To append into an unmanaged `std.ArrayList`, use `parseParamsIntoArrayListEx` and pass the
154/// allocator explicitly.
155pub fn parseParamsIntoArrayList(list: *std.array_list.Managed(Param(Help)), str: []const u8) !void {
156 var unmanaged = list.moveToUnmanaged();
157 defer list.* = unmanaged.toManaged(list.allocator);
159 var end: usize = undefined; 158 var end: usize = undefined;
160 return parseParamsIntoArrayListEx(list, str, &end); 159 try parseParamsIntoArrayListEx(list.allocator, &unmanaged, str, &end);
161} 160}
162 161
163/// Takes a string and parses it into many Param(Help), which are appended onto `list`. 162/// Takes a string and parses it into many Param(Help), which are appended onto `list`.
@@ -954,7 +953,7 @@ fn initPositionals(
954 .one => @as(?T, null), 953 .one => @as(?T, null),
955 .many => switch (multi_arg_kind) { 954 .many => switch (multi_arg_kind) {
956 .slice => @as([]const T, &[_]T{}), 955 .slice => @as([]const T, &[_]T{}),
957 .list => std.ArrayListUnmanaged(T){}, 956 .list => std.ArrayListUnmanaged(T).empty,
958 }, 957 },
959 }; 958 };
960 i += 1; 959 i += 1;
@@ -1031,7 +1030,7 @@ fn Arguments(
1031 .one => @as(?T, null), 1030 .one => @as(?T, null),
1032 .many => switch (multi_arg_kind) { 1031 .many => switch (multi_arg_kind) {
1033 .slice => @as([]const T, &[_]T{}), 1032 .slice => @as([]const T, &[_]T{}),
1034 .list => std.ArrayListUnmanaged(T){}, 1033 .list => std.ArrayListUnmanaged(T).empty,
1035 }, 1034 },
1036 }; 1035 };
1037 1036