Skip to content

Commit 03bb024

Browse files
committed
Eytzinger layout
1 parent 8149517 commit 03bb024

File tree

8 files changed

+196
-99
lines changed

8 files changed

+196
-99
lines changed

benchmarks/inspect.zig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ pub fn main() !void {
3636

3737
var open_timer = try std.time.Timer.start();
3838
var db = try maxminddb.Reader.mmap(allocator, db_path);
39-
defer db.unmap();
39+
defer db.close();
40+
4041
const open_time_ms = @as(f64, @floatFromInt(open_timer.read())) /
4142
@as(f64, @floatFromInt(std.time.ns_per_ms));
4243
std.debug.print("Database opened successfully in {d} ms. Type: {s}\n", .{

benchmarks/lookup.zig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ pub fn main() !void {
3636

3737
var open_timer = try std.time.Timer.start();
3838
var db = try maxminddb.Reader.mmap(allocator, db_path);
39-
defer db.unmap();
39+
defer db.close();
40+
4041
const open_time_ms = @as(f64, @floatFromInt(open_timer.read())) /
4142
@as(f64, @floatFromInt(std.time.ns_per_ms));
4243
std.debug.print("Database opened successfully in {d} ms. Type: {s}\n", .{

examples/inspect.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pub fn main() !void {
1212
const ip = if (args.len > 2) args[2] else "89.160.20.128";
1313

1414
var db = try maxminddb.Reader.mmap(allocator, db_path);
15-
defer db.unmap();
15+
defer db.close();
1616

1717
const result = try db.lookup(
1818
allocator,

examples/lookup.zig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ pub fn main() !void {
1111
defer _ = gpa.detectLeaks();
1212

1313
var db = try maxminddb.Reader.open(allocator, db_path, max_db_size);
14-
defer db.close(allocator);
14+
defer db.close();
15+
16+
try db.buildIPv4Index(16);
1517

1618
// Note, for better performance use arena allocator and reset it after calling lookup().
1719
// You won't need to call city.deinit() in that case.

examples/within.zig

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ pub fn main() !void {
99
defer _ = gpa.detectLeaks();
1010

1111
var db = try maxminddb.Reader.mmap(allocator, db_path);
12-
defer db.unmap();
12+
defer db.close();
1313

1414
const network = if (db.metadata.ip_version == 4)
1515
maxminddb.Network.all_ipv4
@@ -22,7 +22,6 @@ pub fn main() !void {
2222
// The iterator owns the values; each next() call invalidates the previous item.
2323
var n: usize = 0;
2424
while (try it.next()) |item| {
25-
2625
const continent = item.value.continent.code;
2726
const country = item.value.country.iso_code;
2827
var city: []const u8 = "";

src/maxminddb.zig

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ test "GeoLite2 Country" {
139139
allocator,
140140
"test-data/test-data/GeoLite2-Country-Test.mmdb",
141141
);
142-
defer db.unmap();
142+
defer db.close();
143143

144144
try expectEqual(DatabaseType.geolite_country, DatabaseType.new(db.metadata.database_type));
145145

@@ -192,7 +192,7 @@ test "GeoLite2 City" {
192192
allocator,
193193
"test-data/test-data/GeoLite2-City-Test.mmdb",
194194
);
195-
defer db.unmap();
195+
defer db.close();
196196

197197
try expectEqual(DatabaseType.geolite_city, DatabaseType.new(db.metadata.database_type));
198198

@@ -263,7 +263,7 @@ test "GeoLite2 ASN" {
263263
allocator,
264264
"test-data/test-data/GeoLite2-ASN-Test.mmdb",
265265
);
266-
defer db.unmap();
266+
defer db.close();
267267

268268
try expectEqual(DatabaseType.geolite_asn, DatabaseType.new(db.metadata.database_type));
269269

@@ -287,7 +287,7 @@ test "GeoIP2 Country" {
287287
allocator,
288288
"test-data/test-data/GeoIP2-Country-Test.mmdb",
289289
);
290-
defer db.unmap();
290+
defer db.close();
291291

292292
try expectEqual(DatabaseType.geoip_country, DatabaseType.new(db.metadata.database_type));
293293

@@ -342,7 +342,7 @@ test "GeoIP2 Country RepresentedCountry" {
342342
allocator,
343343
"test-data/test-data/GeoIP2-Country-Test.mmdb",
344344
);
345-
defer db.unmap();
345+
defer db.close();
346346

347347
const ip = try std.net.Address.parseIp("202.196.224.0", 0);
348348
const got = (try db.lookup(allocator, geoip2.Country, ip, .{})).?;
@@ -367,7 +367,7 @@ test "GeoIP2 City" {
367367
allocator,
368368
"test-data/test-data/GeoIP2-City-Test.mmdb",
369369
);
370-
defer db.unmap();
370+
defer db.close();
371371

372372
try expectEqual(DatabaseType.geoip_city, DatabaseType.new(db.metadata.database_type));
373373

@@ -451,7 +451,7 @@ test "GeoIP2 Enterprise" {
451451
allocator,
452452
"test-data/test-data/GeoIP2-Enterprise-Test.mmdb",
453453
);
454-
defer db.unmap();
454+
defer db.close();
455455

456456
try expectEqual(DatabaseType.geoip_enterprise, DatabaseType.new(db.metadata.database_type));
457457

@@ -550,7 +550,7 @@ test "GeoIP2 ISP" {
550550
allocator,
551551
"test-data/test-data/GeoIP2-ISP-Test.mmdb",
552552
);
553-
defer db.unmap();
553+
defer db.close();
554554

555555
try expectEqual(DatabaseType.geoip_isp, DatabaseType.new(db.metadata.database_type));
556556

@@ -574,7 +574,7 @@ test "GeoIP2 Connection-Type" {
574574
allocator,
575575
"test-data/test-data/GeoIP2-Connection-Type-Test.mmdb",
576576
);
577-
defer db.unmap();
577+
defer db.close();
578578

579579
try expectEqual(DatabaseType.geoip_connection_type, DatabaseType.new(db.metadata.database_type));
580580

@@ -593,7 +593,7 @@ test "GeoIP2 Anonymous-IP" {
593593
allocator,
594594
"test-data/test-data/GeoIP2-Anonymous-IP-Test.mmdb",
595595
);
596-
defer db.unmap();
596+
defer db.close();
597597

598598
try expectEqual(DatabaseType.geoip_anonymous_ip, DatabaseType.new(db.metadata.database_type));
599599

@@ -617,7 +617,7 @@ test "GeoIP Anonymous-Plus" {
617617
allocator,
618618
"test-data/test-data/GeoIP-Anonymous-Plus-Test.mmdb",
619619
);
620-
defer db.unmap();
620+
defer db.close();
621621

622622
try expectEqual(DatabaseType.geoip_anonymous_plus, DatabaseType.new(db.metadata.database_type));
623623

@@ -640,7 +640,7 @@ test "GeoIP2 DensityIncome" {
640640
allocator,
641641
"test-data/test-data/GeoIP2-DensityIncome-Test.mmdb",
642642
);
643-
defer db.unmap();
643+
defer db.close();
644644

645645
try expectEqual(DatabaseType.geoip_densityincome, DatabaseType.new(db.metadata.database_type));
646646

@@ -660,7 +660,7 @@ test "GeoIP2 Domain" {
660660
allocator,
661661
"test-data/test-data/GeoIP2-Domain-Test.mmdb",
662662
);
663-
defer db.unmap();
663+
defer db.close();
664664

665665
try expectEqual(DatabaseType.geoip_domain, DatabaseType.new(db.metadata.database_type));
666666

@@ -679,7 +679,7 @@ test "GeoIP2 IP-Risk" {
679679
allocator,
680680
"test-data/test-data/GeoIP2-IP-Risk-Test.mmdb",
681681
);
682-
defer db.unmap();
682+
defer db.close();
683683

684684
try expectEqual(DatabaseType.geoip_ip_risk, DatabaseType.new(db.metadata.database_type));
685685

@@ -716,7 +716,7 @@ test "GeoIP2 Static-IP-Score" {
716716
allocator,
717717
"test-data/test-data/GeoIP2-Static-IP-Score-Test.mmdb",
718718
);
719-
defer db.unmap();
719+
defer db.close();
720720

721721
try expectEqual(DatabaseType.geoip_static_ip_score, DatabaseType.new(db.metadata.database_type));
722722

@@ -735,7 +735,7 @@ test "GeoIP2 User-Count" {
735735
allocator,
736736
"test-data/test-data/GeoIP2-User-Count-Test.mmdb",
737737
);
738-
defer db.unmap();
738+
defer db.close();
739739

740740
try expectEqual(DatabaseType.geoip_user_count, DatabaseType.new(db.metadata.database_type));
741741

@@ -755,7 +755,7 @@ test "lookup with field name filtering" {
755755
allocator,
756756
"test-data/test-data/GeoLite2-City-Test.mmdb",
757757
);
758-
defer db.unmap();
758+
defer db.close();
759759

760760
const ip = try std.net.Address.parseIp("89.160.20.128", 0);
761761

@@ -784,7 +784,7 @@ test "lookup with custom record" {
784784
allocator,
785785
"test-data/test-data/GeoLite2-City-Test.mmdb",
786786
);
787-
defer db.unmap();
787+
defer db.close();
788788

789789
const MyCity = struct {
790790
city: struct {
@@ -808,7 +808,7 @@ test "lookup with any.Value" {
808808
allocator,
809809
"test-data/test-data/GeoLite2-City-Test.mmdb",
810810
);
811-
defer db.unmap();
811+
defer db.close();
812812

813813
const ip = try std.net.Address.parseIp("89.160.20.128", 0);
814814
const got = (try db.lookup(allocator, any.Value, ip, .{})).?;
@@ -830,7 +830,7 @@ test "lookup with any.Value and field name filtering" {
830830
allocator,
831831
"test-data/test-data/GeoLite2-City-Test.mmdb",
832832
);
833-
defer db.unmap();
833+
defer db.close();
834834

835835
const ip = try std.net.Address.parseIp("89.160.20.128", 0);
836836
const got = (try db.lookup(
@@ -858,7 +858,7 @@ test "within returns all networks" {
858858
allocator,
859859
"test-data/test-data/GeoLite2-City-Test.mmdb",
860860
);
861-
defer db.unmap();
861+
defer db.close();
862862

863863
var it = try db.within(allocator, geolite2.City, net.Network.all_ipv6, .{});
864864
defer it.deinit();
@@ -874,7 +874,7 @@ test "within yields record when query prefix is narrower than record network" {
874874
allocator,
875875
"test-data/test-data/GeoLite2-ASN-Test.mmdb",
876876
);
877-
defer db.unmap();
877+
defer db.close();
878878

879879
// 89.160.20.0/24 is inside the /17 record.
880880
// The iterator must still yield it even though the data record is found
@@ -901,7 +901,7 @@ test "within yields record when start node is a data pointer" {
901901
allocator,
902902
"test-data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb",
903903
);
904-
defer db.unmap();
904+
defer db.close();
905905

906906
const network = try net.Network.parse("0.0.0.0/0");
907907
var it = try db.within(allocator, any.Value, network, .{});
@@ -920,7 +920,7 @@ test "reject IPv6 on IPv4-only database" {
920920
allocator,
921921
"test-data/test-data/MaxMind-DB-test-ipv4-32.mmdb",
922922
);
923-
defer db.unmap();
923+
defer db.close();
924924

925925
const network = try net.Network.parse("::/0");
926926
const it = db.within(allocator, any.Value, network, .{});
@@ -936,7 +936,7 @@ test "within skips empty records" {
936936
allocator,
937937
"test-data/test-data/GeoIP2-Anonymous-IP-Test.mmdb",
938938
);
939-
defer db.unmap();
939+
defer db.close();
940940

941941
// All records including empty.
942942
{

src/net.zig

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,22 +150,22 @@ pub const IP = union(enum) {
150150
.v4 => |b| {
151151
// Combines IP bytes into a big-endian u32, e.g.,
152152
// 89.160.20.128 = 89 << 24 | 160 << 16 | 20 << 8 | 128
153-
const ipAsNumber = std.mem.readInt(u32, &b, .big);
153+
const ip_as_number = std.mem.readInt(u32, &b, .big);
154154
const ones: u32 = std.math.maxInt(u32);
155155
const bitmask = if (prefix_len == 0) 0 else ones << @intCast(32 - prefix_len);
156156

157157
var out: [4]u8 = undefined;
158-
std.mem.writeInt(u32, &out, ipAsNumber & bitmask, .big);
158+
std.mem.writeInt(u32, &out, ip_as_number & bitmask, .big);
159159

160160
return .{ .v4 = out };
161161
},
162162
.v6 => |b| {
163-
const ipAsNumber = std.mem.readInt(u128, &b, .big);
163+
const ip_as_number = std.mem.readInt(u128, &b, .big);
164164
const ones: u128 = std.math.maxInt(u128);
165165
const bitmask = if (prefix_len == 0) 0 else ones << @intCast(128 - prefix_len);
166166

167167
var out: [16]u8 = undefined;
168-
std.mem.writeInt(u128, &out, ipAsNumber & bitmask, .big);
168+
std.mem.writeInt(u128, &out, ip_as_number & bitmask, .big);
169169

170170
return .{ .v6 = out };
171171
},

0 commit comments

Comments
 (0)