@@ -24,6 +24,11 @@ pub fn SegmentMerger(comptime Segment: type) type {
24
24
reader : Segment.Reader ,
25
25
skip_docs : std .AutoHashMapUnmanaged (u32 , void ) = .{},
26
26
27
+ pub fn deinit (self : * Source , allocator : std.mem.Allocator ) void {
28
+ self .reader .close ();
29
+ self .skip_docs .deinit (allocator );
30
+ }
31
+
27
32
pub fn read (self : * Source ) ! ? Item {
28
33
while (true ) {
29
34
const item = try self .reader .read () orelse return null ;
@@ -48,25 +53,25 @@ pub fn SegmentMerger(comptime Segment: type) type {
48
53
49
54
current_item : ? Item = null ,
50
55
51
- pub fn init (allocator : std.mem.Allocator , collection : * SegmentList (Segment )) Self {
56
+ pub fn init (allocator : std.mem.Allocator , collection : * SegmentList (Segment ), num_sources : usize ) ! Self {
52
57
return .{
53
58
.allocator = allocator ,
54
59
.collection = collection ,
60
+ .sources = try std .ArrayListUnmanaged (Source ).initCapacity (allocator , num_sources ),
55
61
};
56
62
}
57
63
58
64
pub fn deinit (self : * Self ) void {
59
65
for (self .sources .items ) | * source | {
60
- source .reader .close ();
61
- source .skip_docs .deinit (self .allocator );
66
+ source .deinit (self .allocator );
62
67
}
63
68
self .sources .deinit (self .allocator );
64
69
self .segment .deinit (self .allocator );
65
70
self .* = undefined ;
66
71
}
67
72
68
- pub fn addSource (self : * Self , source : * Segment ) ! void {
69
- try self .sources .append ( self . allocator , .{
73
+ pub fn addSource (self : * Self , source : * Segment ) void {
74
+ self .sources .appendAssumeCapacity ( .{
70
75
.reader = source .reader (),
71
76
});
72
77
}
@@ -158,7 +163,7 @@ test "merge segments" {
158
163
var collection = try SegmentList (MemorySegment ).init (std .testing .allocator , 3 );
159
164
defer collection .deinit (std .testing .allocator , .delete );
160
165
161
- var merger = SegmentMerger (MemorySegment ).init (std .testing .allocator , & collection );
166
+ var merger = try SegmentMerger (MemorySegment ).init (std .testing .allocator , & collection , 3 );
162
167
defer merger .deinit ();
163
168
164
169
var node1 = try SegmentList (MemorySegment ).createSegment (std .testing .allocator , .{});
@@ -174,9 +179,9 @@ test "merge segments" {
174
179
node2 .value .info = .{ .version = 12 , .merges = 0 };
175
180
node3 .value .info = .{ .version = 13 , .merges = 0 };
176
181
177
- try merger .addSource (node1 .value );
178
- try merger .addSource (node2 .value );
179
- try merger .addSource (node3 .value );
182
+ merger .addSource (node1 .value );
183
+ merger .addSource (node2 .value );
184
+ merger .addSource (node3 .value );
180
185
181
186
try merger .prepare ();
182
187
0 commit comments