diff options
Diffstat (limited to 'clap.zig')
| -rw-r--r-- | clap.zig | 23 |
1 files changed, 11 insertions, 12 deletions
| @@ -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. |
| 86 | pub fn parseParamsEx(allocator: std.mem.Allocator, str: []const u8, end: *usize) ![]Param(Help) { | 86 | pub 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. |
| 133 | pub fn parseParamsIntoSlice(slice: []Param(Help), str: []const u8) ![]Param(Help) { | 133 | pub 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`. |
| 158 | pub 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. | ||
| 155 | pub 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 | ||