zig: port log.MsgStore to 0.15.0-dev.703+597dd328e
This commit is contained in:
		
							parent
							
								
									717bef9c61
								
							
						
					
					
						commit
						0e3806ab98
					
				
					 1 changed files with 14 additions and 8 deletions
				
			
		
							
								
								
									
										22
									
								
								src/log.zig
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								src/log.zig
									
										
									
									
									
								
							| 
						 | 
					@ -10,9 +10,14 @@ receiver: Receiver,
 | 
				
			||||||
subscriber: ?tp.pid,
 | 
					subscriber: ?tp.pid,
 | 
				
			||||||
heap: [32 + 1024]u8,
 | 
					heap: [32 + 1024]u8,
 | 
				
			||||||
fba: std.heap.FixedBufferAllocator,
 | 
					fba: std.heap.FixedBufferAllocator,
 | 
				
			||||||
msg_store: MsgStoreT,
 | 
					msg_store: MsgStore,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const MsgStore = std.DoublyLinkedList;
 | 
				
			||||||
 | 
					const MsgStoreEntry = struct {
 | 
				
			||||||
 | 
					    data: []u8,
 | 
				
			||||||
 | 
					    node: MsgStore.Node,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const MsgStoreT = std.DoublyLinkedList([]u8);
 | 
					 | 
				
			||||||
const Receiver = tp.Receiver(*Self);
 | 
					const Receiver = tp.Receiver(*Self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const StartArgs = struct {
 | 
					const StartArgs = struct {
 | 
				
			||||||
| 
						 | 
					@ -38,7 +43,7 @@ fn init(args: StartArgs) !*Self {
 | 
				
			||||||
        .subscriber = null,
 | 
					        .subscriber = null,
 | 
				
			||||||
        .heap = undefined,
 | 
					        .heap = undefined,
 | 
				
			||||||
        .fba = std.heap.FixedBufferAllocator.init(&p.heap),
 | 
					        .fba = std.heap.FixedBufferAllocator.init(&p.heap),
 | 
				
			||||||
        .msg_store = MsgStoreT{},
 | 
					        .msg_store = MsgStore{},
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    return p;
 | 
					    return p;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -55,17 +60,18 @@ fn log(msg: []const u8) void {
 | 
				
			||||||
fn store(self: *Self, m: tp.message) void {
 | 
					fn store(self: *Self, m: tp.message) void {
 | 
				
			||||||
    const allocator: std.mem.Allocator = self.fba.allocator();
 | 
					    const allocator: std.mem.Allocator = self.fba.allocator();
 | 
				
			||||||
    const buf: []u8 = allocator.alloc(u8, m.len()) catch return;
 | 
					    const buf: []u8 = allocator.alloc(u8, m.len()) catch return;
 | 
				
			||||||
    var node: *MsgStoreT.Node = allocator.create(MsgStoreT.Node) catch return;
 | 
					    var msg: *MsgStoreEntry = allocator.create(MsgStoreEntry) catch return;
 | 
				
			||||||
    node.data = buf;
 | 
					    msg.data = buf;
 | 
				
			||||||
    @memcpy(buf, m.buf);
 | 
					    @memcpy(buf, m.buf);
 | 
				
			||||||
    self.msg_store.append(node);
 | 
					    self.msg_store.append(&msg.node);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn store_send(self: *Self) void {
 | 
					fn store_send(self: *Self) void {
 | 
				
			||||||
    var node = self.msg_store.first;
 | 
					    var node = self.msg_store.first;
 | 
				
			||||||
    if (self.subscriber) |sub| {
 | 
					    if (self.subscriber) |sub| {
 | 
				
			||||||
        while (node) |node_| {
 | 
					        while (node) |node_| {
 | 
				
			||||||
            sub.send_raw(tp.message{ .buf = node_.data }) catch return;
 | 
					            const msg: *MsgStoreEntry = @fieldParentPtr("node", node_);
 | 
				
			||||||
 | 
					            sub.send_raw(tp.message{ .buf = msg.data }) catch return;
 | 
				
			||||||
            node = node_.next;
 | 
					            node = node_.next;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -73,7 +79,7 @@ fn store_send(self: *Self) void {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn store_reset(self: *Self) void {
 | 
					fn store_reset(self: *Self) void {
 | 
				
			||||||
    self.msg_store = MsgStoreT{};
 | 
					    self.msg_store = MsgStore{};
 | 
				
			||||||
    self.fba.reset();
 | 
					    self.fba.reset();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue