@@ -62,7 +62,7 @@ allocator: Allocator,
6262buffer_pool : BufferPool ,
6363script_pool : std .heap .MemoryPool (PendingScript ),
6464
65- const OrderList = std .DoublyLinkedList ( * PendingScript ) ;
65+ const OrderList = std .DoublyLinkedList ;
6666
6767pub fn init (browser : * Browser , page : * Page ) ScriptManager {
6868 // page isn't fully initialized, we can setup our reference, but that's it.
@@ -96,7 +96,7 @@ pub fn reset(self: *ScriptManager) void {
9696
9797fn clearList (_ : * const ScriptManager , list : * OrderList ) void {
9898 while (list .first ) | node | {
99- const pending_script = node . data ;
99+ const pending_script : * PendingScript = @fieldParentPtr ( " node" , node ) ;
100100 // this removes it from the list
101101 pending_script .deinit ();
102102 }
@@ -179,7 +179,7 @@ pub fn addFromElement(self: *ScriptManager, element: *parser.Element) !void {
179179 .script = script ,
180180 .complete = false ,
181181 .manager = self ,
182- .node = .{ . data = pending_script },
182+ .node = .{},
183183 };
184184
185185 if (source == .@"inline" ) {
@@ -193,7 +193,6 @@ pub fn addFromElement(self: *ScriptManager, element: *parser.Element) !void {
193193 log .debug (.http , "script queue" , .{ .url = remote_url .? });
194194 }
195195
196- pending_script .node = .{ .data = pending_script };
197196 self .getList (& pending_script .script ).append (& pending_script .node );
198197
199198 errdefer pending_script .deinit ();
@@ -323,7 +322,7 @@ fn evaluate(self: *ScriptManager) void {
323322 defer self .is_evaluating = false ;
324323
325324 while (self .scripts .first ) | n | {
326- var pending_script = n . data ;
325+ var pending_script : * PendingScript = @fieldParentPtr ( "node" , n ) ;
327326 if (pending_script .complete == false ) {
328327 return ;
329328 }
@@ -343,7 +342,7 @@ fn evaluate(self: *ScriptManager) void {
343342 }
344343
345344 while (self .deferreds .first ) | n | {
346- var pending_script = n . data ;
345+ var pending_script : * PendingScript = @fieldParentPtr ( "node" , n ) ;
347346 if (pending_script .complete == false ) {
348347 return ;
349348 }
@@ -395,15 +394,15 @@ fn getList(self: *ScriptManager, script: *const Script) *OrderList {
395394}
396395
397396fn startCallback (transfer : * Http.Transfer ) ! void {
398- const script : * PendingScript = @alignCast ( @ptrCast (transfer .ctx ));
397+ const script : * PendingScript = @ptrCast ( @alignCast (transfer .ctx ));
399398 script .startCallback (transfer ) catch | err | {
400399 log .err (.http , "SM.startCallback" , .{ .err = err , .transfer = transfer });
401400 return err ;
402401 };
403402}
404403
405404fn headerCallback (transfer : * Http.Transfer ) ! void {
406- const script : * PendingScript = @alignCast ( @ptrCast (transfer .ctx ));
405+ const script : * PendingScript = @ptrCast ( @alignCast (transfer .ctx ));
407406 script .headerCallback (transfer ) catch | err | {
408407 log .err (.http , "SM.headerCallback" , .{
409408 .err = err ,
@@ -415,20 +414,20 @@ fn headerCallback(transfer: *Http.Transfer) !void {
415414}
416415
417416fn dataCallback (transfer : * Http.Transfer , data : []const u8 ) ! void {
418- const script : * PendingScript = @alignCast ( @ptrCast (transfer .ctx ));
417+ const script : * PendingScript = @ptrCast ( @alignCast (transfer .ctx ));
419418 script .dataCallback (transfer , data ) catch | err | {
420419 log .err (.http , "SM.dataCallback" , .{ .err = err , .transfer = transfer , .len = data .len });
421420 return err ;
422421 };
423422}
424423
425424fn doneCallback (ctx : * anyopaque ) ! void {
426- const script : * PendingScript = @alignCast ( @ptrCast (ctx ));
425+ const script : * PendingScript = @ptrCast ( @alignCast (ctx ));
427426 script .doneCallback ();
428427}
429428
430429fn errorCallback (ctx : * anyopaque , err : anyerror ) void {
431- const script : * PendingScript = @alignCast ( @ptrCast (ctx ));
430+ const script : * PendingScript = @ptrCast ( @alignCast (ctx ));
432431 script .errorCallback (err );
433432}
434433
@@ -682,17 +681,22 @@ const BufferPool = struct {
682681 available : List = .{},
683682 allocator : Allocator ,
684683 max_concurrent_transfers : u8 ,
685- node_pool : std .heap .MemoryPool (List . Node ),
684+ mem_pool : std .heap .MemoryPool (Container ),
686685
687- const List = std .DoublyLinkedList (std .ArrayListUnmanaged (u8 ));
686+ const List = std .DoublyLinkedList ;
687+
688+ const Container = struct {
689+ node : List.Node ,
690+ buf : std .ArrayListUnmanaged (u8 ),
691+ };
688692
689693 fn init (allocator : Allocator , max_concurrent_transfers : u8 ) BufferPool {
690694 return .{
691695 .available = .{},
692696 .count = 0 ,
693697 .allocator = allocator ,
694698 .max_concurrent_transfers = max_concurrent_transfers ,
695- .node_pool = std .heap .MemoryPool (List . Node ).init (allocator ),
699+ .mem_pool = std .heap .MemoryPool (Container ).init (allocator ),
696700 };
697701 }
698702
@@ -701,21 +705,23 @@ const BufferPool = struct {
701705
702706 var node = self .available .first ;
703707 while (node ) | n | {
704- n .data .deinit (allocator );
708+ const container : * Container = @fieldParentPtr ("node" , n );
709+ container .buf .deinit (allocator );
705710 node = n .next ;
706711 }
707- self .node_pool .deinit ();
712+ self .mem_pool .deinit ();
708713 }
709714
710- fn get (self : * BufferPool ) ArrayListUnmanaged (u8 ) {
715+ fn get (self : * BufferPool ) std. ArrayListUnmanaged (u8 ) {
711716 const node = self .available .popFirst () orelse {
712717 // return a new buffer
713718 return .{};
714719 };
715720
716721 self .count -= 1 ;
717- defer self .node_pool .destroy (node );
718- return node .data ;
722+ const container : * Container = @fieldParentPtr ("node" , node );
723+ defer self .mem_pool .destroy (container );
724+ return container .buf ;
719725 }
720726
721727 fn release (self : * BufferPool , buffer : ArrayListUnmanaged (u8 )) void {
@@ -727,16 +733,16 @@ const BufferPool = struct {
727733 return ;
728734 }
729735
730- const node = self .node_pool .create () catch | err | {
736+ const container = self .mem_pool .create () catch | err | {
731737 b .deinit (self .allocator );
732738 log .err (.http , "SM BufferPool release" , .{ .err = err });
733739 return ;
734740 };
735741
736742 b .clearRetainingCapacity ();
737- node .* = .{ .data = b };
743+ container .* = .{ .buf = b , . node = .{} };
738744 self .count += 1 ;
739- self .available .append (node );
745+ self .available .append (& container . node );
740746 }
741747};
742748
@@ -769,7 +775,7 @@ const Blocking = struct {
769775 return error .InvalidStatusCode ;
770776 }
771777
772- var self : * Blocking = @alignCast ( @ptrCast (transfer .ctx ));
778+ var self : * Blocking = @ptrCast ( @alignCast (transfer .ctx ));
773779 self .buffer = self .buffer_pool .get ();
774780 }
775781
@@ -780,7 +786,7 @@ const Blocking = struct {
780786 // .blocking = true,
781787 // });
782788
783- var self : * Blocking = @alignCast ( @ptrCast (transfer .ctx ));
789+ var self : * Blocking = @ptrCast ( @alignCast (transfer .ctx ));
784790 self .buffer .appendSlice (self .allocator , data ) catch | err | {
785791 log .err (.http , "SM.dataCallback" , .{
786792 .err = err ,
@@ -793,15 +799,15 @@ const Blocking = struct {
793799 }
794800
795801 fn doneCallback (ctx : * anyopaque ) ! void {
796- var self : * Blocking = @alignCast ( @ptrCast (ctx ));
802+ var self : * Blocking = @ptrCast ( @alignCast (ctx ));
797803 self .state = .{ .done = .{
798804 .buffer = self .buffer ,
799805 .buffer_pool = self .buffer_pool ,
800806 } };
801807 }
802808
803809 fn errorCallback (ctx : * anyopaque , err : anyerror ) void {
804- var self : * Blocking = @alignCast ( @ptrCast (ctx ));
810+ var self : * Blocking = @ptrCast ( @alignCast (ctx ));
805811 self .state = .{ .err = err };
806812 self .buffer_pool .release (self .buffer );
807813 }
0 commit comments