authorgravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2020-07-13 00:34:58+10:00
committergravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2020-07-13 00:34:58+10:00
logf7e4014c823f1134040beed700c2b0fff5384da1
tree869f7bce5a8dbc839d6d37b1a398ab807b2621d4
parent4b48266bb7dd0a9f9353c0695a2c98c497c0165c
signaturelock-open Commit is signed but in an unrecognized format.

std: use *Unmanaged data structures in http.Headers object


1 files changed, 29 insertions(+), 29 deletions(-)

lib/std/http/headers.zig+29-29
......@@ -98,9 +98,9 @@ test "HeaderEntry" {
9898 testing.expectEqualSlices(u8, "x", e.value);
9999}
100100
101const HeaderList = std.ArrayList(HeaderEntry);
102const HeaderIndexList = std.ArrayList(usize);
103const HeaderIndex = std.StringHashMap(HeaderIndexList);
101const HeaderList = std.ArrayListUnmanaged(HeaderEntry);
102const HeaderIndexList = std.ArrayListUnmanaged(usize);
103const HeaderIndex = std.StringHashMapUnmanaged(HeaderIndexList);
104104
105105pub const Headers = struct {
106106 // the owned header field name is stored in the index as part of the key
......@@ -113,8 +113,8 @@ pub const Headers = struct {
113113 pub fn init(allocator: *Allocator) Self {
114114 return Self{
115115 .allocator = allocator,
116 .data = HeaderList.init(allocator),
117 .index = HeaderIndex.init(allocator),
116 .data = HeaderList{},
117 .index = HeaderIndex{},
118118 };
119119 }
120120
......@@ -122,16 +122,16 @@ pub const Headers = struct {
122122 {
123123 for (self.index.items()) |*entry| {
124124 const dex = &entry.value;
125 dex.deinit();
125 dex.deinit(self.allocator);
126126 self.allocator.free(entry.key);
127127 }
128 self.index.deinit();
128 self.index.deinit(self.allocator);
129129 }
130130 {
131 for (self.data.span()) |entry| {
131 for (self.data.items) |entry| {
132132 entry.deinit();
133133 }
134 self.data.deinit();
134 self.data.deinit(self.allocator);
135135 }
136136 self.* = undefined;
137137 }
......@@ -139,36 +139,36 @@ pub const Headers = struct {
139139 pub fn clone(self: Self, allocator: *Allocator) !Self {
140140 var other = Headers.init(allocator);
141141 errdefer other.deinit();
142 try other.data.ensureCapacity(self.data.items.len);
143 try other.index.initCapacity(self.index.entries.len);
144 for (self.data.span()) |entry| {
142 try other.data.ensureCapacity(allocator, self.data.items.len);
143 try other.index.initCapacity(allocator, self.index.entries.len);
144 for (self.data.items) |entry| {
145145 try other.append(entry.name, entry.value, entry.never_index);
146146 }
147147 return other;
148148 }
149149
150150 pub fn toSlice(self: Self) []const HeaderEntry {
151 return self.data.span();
151 return self.data.items;
152152 }
153153
154154 pub fn append(self: *Self, name: []const u8, value: []const u8, never_index: ?bool) !void {
155155 const n = self.data.items.len + 1;
156 try self.data.ensureCapacity(n);
156 try self.data.ensureCapacity(self.allocator, n);
157157 var entry: HeaderEntry = undefined;
158158 if (self.index.getEntry(name)) |kv| {
159159 entry = try HeaderEntry.init(self.allocator, kv.key, value, never_index);
160160 errdefer entry.deinit();
161161 const dex = &kv.value;
162 try dex.append(n - 1);
162 try dex.append(self.allocator, n - 1);
163163 } else {
164164 const name_dup = try self.allocator.dupe(u8, name);
165165 errdefer self.allocator.free(name_dup);
166166 entry = try HeaderEntry.init(self.allocator, name_dup, value, never_index);
167167 errdefer entry.deinit();
168 var dex = HeaderIndexList.init(self.allocator);
169 try dex.append(n - 1);
170 errdefer dex.deinit();
171 _ = try self.index.put(name_dup, dex);
168 var dex = HeaderIndexList{};
169 try dex.append(self.allocator, n - 1);
170 errdefer dex.deinit(self.allocator);
171 _ = try self.index.put(self.allocator, name_dup, dex);
172172 }
173173 self.data.appendAssumeCapacity(entry);
174174 }
......@@ -194,7 +194,7 @@ pub const Headers = struct {
194194
195195 /// Returns boolean indicating if something was deleted.
196196 pub fn delete(self: *Self, name: []const u8) bool {
197 if (self.index.remove(name)) |kv| {
197 if (self.index.remove(name)) |*kv| {
198198 const dex = &kv.value;
199199 // iterate backwards
200200 var i = dex.items.len;
......@@ -205,7 +205,7 @@ pub const Headers = struct {
205205 assert(mem.eql(u8, removed.name, name));
206206 removed.deinit();
207207 }
208 dex.deinit();
208 dex.deinit(self.allocator);
209209 self.allocator.free(kv.key);
210210 self.rebuildIndex();
211211 return true;
......@@ -225,13 +225,13 @@ pub const Headers = struct {
225225 const dex = &kv.value;
226226 if (dex.items.len == 1) {
227227 // was last item; delete the index
228 dex.deinit();
228 dex.deinit(self.allocator);
229229 removed.deinit();
230230 const key = kv.key;
231231 _ = self.index.remove(key); // invalidates `kv` and `dex`
232232 self.allocator.free(key);
233233 } else {
234 dex.shrink(dex.items.len - 1);
234 dex.shrink(self.allocator, dex.items.len - 1);
235235 removed.deinit();
236236 }
237237 // if it was the last item; no need to rebuild index
......@@ -250,13 +250,13 @@ pub const Headers = struct {
250250 const dex = &kv.value;
251251 if (dex.items.len == 1) {
252252 // was last item; delete the index
253 dex.deinit();
253 dex.deinit(self.allocator);
254254 removed.deinit();
255255 const key = kv.key;
256256 _ = self.index.remove(key); // invalidates `kv` and `dex`
257257 self.allocator.free(key);
258258 } else {
259 dex.shrink(dex.items.len - 1);
259 dex.shrink(self.allocator, dex.items.len - 1);
260260 removed.deinit();
261261 }
262262 // if it was the last item; no need to rebuild index
......@@ -282,7 +282,7 @@ pub const Headers = struct {
282282
283283 const buf = try allocator.alloc(HeaderEntry, dex.items.len);
284284 var n: usize = 0;
285 for (dex.span()) |idx| {
285 for (dex.items) |idx| {
286286 buf[n] = self.data.items[idx];
287287 n += 1;
288288 }
......@@ -305,7 +305,7 @@ pub const Headers = struct {
305305 // adapted from mem.join
306306 const total_len = blk: {
307307 var sum: usize = dex.items.len - 1; // space for separator(s)
308 for (dex.span()) |idx|
308 for (dex.items) |idx|
309309 sum += self.data.items[idx].value.len;
310310 break :blk sum;
311311 };
......@@ -493,8 +493,8 @@ test "Headers.getIndices" {
493493 try h.append("set-cookie", "y=2", null);
494494
495495 testing.expect(null == h.getIndices("not-present"));
496 testing.expectEqualSlices(usize, &[_]usize{0}, h.getIndices("foo").?.span());
497 testing.expectEqualSlices(usize, &[_]usize{ 1, 2 }, h.getIndices("set-cookie").?.span());
496 testing.expectEqualSlices(usize, &[_]usize{0}, h.getIndices("foo").?.items);
497 testing.expectEqualSlices(usize, &[_]usize{ 1, 2 }, h.getIndices("set-cookie").?.items);
498498}
499499
500500test "Headers.get" {