Skip to content

Commit 31ba05d

Browse files
committed
feat: pre-allocate enough space for accept items
1 parent 5e347ce commit 31ba05d

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/request.zig

+7-5
Original file line numberDiff line numberDiff line change
@@ -605,10 +605,12 @@ const AcceptHeaderList = std.ArrayList(AcceptItem);
605605

606606
/// Parses `Accept:` http header into `list`, ordered from highest q factor to lowest
607607
pub fn parseAcceptHeaders(self: *const Self, allocator: std.mem.Allocator) !AcceptHeaderList {
608-
var list = AcceptHeaderList.init(allocator);
609-
errdefer list.deinit();
608+
const accept_str = self.getHeaderCommon(.accept) orelse return error.NoAcceptHeader;
609+
610+
const comma_count = std.mem.count(u8, accept_str, ",");
610611

611-
const accept_str = self.getHeaderCommon(.accept) orelse return error.NoAccept;
612+
var list = try AcceptHeaderList.initCapacity(allocator, comma_count + 1);
613+
errdefer list.deinit();
612614

613615
var tok_iter = std.mem.tokenize(u8, accept_str, ", ");
614616
while (tok_iter.next()) |tok| {
@@ -637,11 +639,11 @@ pub fn parseAcceptHeaders(self: *const Self, allocator: std.mem.Allocator) !Acce
637639
};
638640
for (list.items, 1..) |item, i| {
639641
if (AcceptItem.lessThan({}, new_item, item)) {
640-
try list.insert(i, new_item);
642+
list.insertAssumeCapacity(i, new_item);
641643
break;
642644
}
643645
} else {
644-
try list.append(new_item);
646+
list.appendAssumeCapacity(new_item);
645647
}
646648
}
647649
return list;

0 commit comments

Comments
 (0)