const string = @import("string_types.zig").string; const Allocator = @import("std").mem.Allocator; const assert = @import("std").debug.assert; const copy = @import("std").mem.copy; const Env = @import("./env.zig"); const bun = @import("bun"); const StringBuilder = @This(); const DebugHashTable = if (Env.allow_assert) std.AutoHashMapUnmanaged(u64, void) else void; len: usize = 0, cap: usize = 0, ptr: ?[*]u8 = null, debug_only_checker: DebugHashTable = DebugHashTable{}, pub fn count(this: *StringBuilder, slice: string) void { this.cap += slice.len; if (comptime Env.allow_assert) { _ = this.debug_only_checker.getOrPut(bun.default_allocator, bun.hash(slice)) catch unreachable; } } pub fn allocate(this: *StringBuilder, allocator: Allocator) !void { var slice = try allocator.alloc(u8, this.cap); this.ptr = slice.ptr; this.len = 0; } pub fn deinit(this: *StringBuilder, allocator: Allocator) void { if (this.ptr == null or this.cap == 0) return; allocator.free(this.ptr.?[0..this.cap]); if (comptime Env.allow_assert) { this.debug_only_checker.deinit(bun.default_allocator); this.debug_only_checker = .{}; } } pub fn append(this: *StringBuilder, slice: string) string { if (comptime Env.allow_assert) { assert(this.len <= this.cap); // didn't count everything assert(this.ptr != null); // must call allocate first } if (comptime Env.allow_assert) { assert(this.debug_only_checker.contains(bun.hash(slice))); } bun.copy(u8, this.ptr.?[this.len..this.cap], slice); const result = this.ptr.?[this.len..this.cap][0..slice.len]; this.len += slice.len; if (Env.allow_assert) { assert(this.len <= this.cap); } return result; } const std = @import("std"); pub fn fmt(this: *StringBuilder, comptime str: string, args: anytype) string { if (Env.allow_assert) { assert(this.len <= this.cap); // didn't count everything assert(this.ptr != null); // must call allocate first } var buf = this.ptr.?[this.len..this.cap]; const out = std.fmt.bufPrint(buf, str, args) catch unreachable; this.len += out.len; if (Env.allow_assert) { assert(this.len <= this.cap); } return out; } pub fn fmtCount(this: *StringBuilder, comptime str: string, args: anytype) void { this.cap += std.fmt.count(str, args); } pub fn allocatedSlice(this: *StringBuilder) []u8 { var ptr = this.ptr orelse return &[_]u8{}; std.debug.assert(this.cap > 0); std.debug.assert(this.len > 0); return ptr[0..this.cap]; } mp;follow=1'>x/net/route/message.go (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2018-02-09Update German translationGravatar stratmaster 2-10/+18
2018-02-08Improve error handling for HTTP clientGravatar Frédéric Guillot 5-7/+62
2018-02-08Add missing German stringGravatar stratmaster 2-4/+6
2018-02-07Strip invalid XML characters to avoid parsing errorsGravatar Frédéric Guillot 1-1/+26
2018-02-07Remove period for feed errorsGravatar Frédéric Guillot 4-23/+23
2018-02-07Improve error handling when the response is emptyGravatar Frédéric Guillot 5-6/+28
2018-02-07Add missing French translationGravatar stratmaster 2-2/+4
2018-02-05Update ChangeLog2.0.2Gravatar Frédéric Guillot 1-0/+14
2018-02-04Add support for Let's Encrypt http-01 challengeGravatar Frédéric Guillot 32-286/+2042
2018-02-04Move template functions outside engine (refactoring)Gravatar Frédéric Guillot 9-214/+254
2018-02-04Take timezone into consideration when calculating relative timeGravatar Frédéric Guillot 16-58/+91
2018-02-03Add support for HTTP Strict Transport Security headerGravatar Frédéric Guillot 4-3/+33
2018-02-03Add support for base URLs with subfoldersGravatar Frédéric Guillot 10-23/+105
2018-02-01Update German translationGravatar stratmaster 2-4/+12
2018-01-31Add missing about menu in settingsGravatar Frédéric Guillot 5-5/+29
2018-01-31Show API URL endpoints in user interfaceGravatar Frédéric Guillot 11-14/+99
2018-01-29Do not update entry date while refreshing a feedGravatar Frédéric Guillot 1-4/+5
2018-01-29Enable debug mode for integration testsGravatar Frédéric Guillot 1-1/+1
2018-01-29Add the possiblity to enable debug mode with an environment variableGravatar Frédéric Guillot 2-1/+6
2018-01-29Keep code base tidyGravatar Frédéric Guillot 5-18/+16
2018-01-29Add flag to enable debug loggingGravatar Rogier Lommers 2-7/+64
2018-01-25Improve unread counter updatesGravatar Mahendra Kalkura 1-6/+35