Skip to content

Commit 3b23fc9

Browse files
authored
Merge pull request #4 from marselester/lookup-perf
Add allocator to all public functions to improve performance
2 parents 34fbece + 822ff33 commit 3b23fc9

File tree

4 files changed

+95
-71
lines changed

4 files changed

+95
-71
lines changed

examples/lookup.zig

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ 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();
14+
defer db.close(allocator);
1515

16+
// Note, for better performance use arena allocator and reset it after calling lookup().
17+
// You won't need to call city.deinit() in that case.
1618
const ip = try std.net.Address.parseIp("89.160.20.128", 0);
17-
const city = try db.lookup(maxminddb.geoip2.City, &ip);
19+
const city = try db.lookup(allocator, maxminddb.geoip2.City, &ip);
1820
defer city.deinit();
1921

2022
var it = city.country.names.?.iterator();

examples/within.zig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ pub fn main() !void {
1010
const allocator = gpa.allocator();
1111
defer _ = gpa.detectLeaks();
1212

13-
var db = try maxminddb.Reader.open_mmap(allocator, db_path);
14-
defer db.close();
13+
var db = try maxminddb.Reader.mmap(allocator, db_path);
14+
defer db.unmap();
1515

1616
const network = maxminddb.Network{
1717
.ip = try std.net.Address.parseIp("0.0.0.0", 0),
1818
};
19-
var it = try db.within(maxminddb.geolite2.City, network);
19+
var it = try db.within(allocator, maxminddb.geolite2.City, network);
2020
defer it.deinit();
2121

2222
var n: usize = 0;

src/maxminddb.zig

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,20 @@ fn expectEqualMaps(
3232
}
3333
}
3434

35+
const allocator = std.testing.allocator;
3536
const expectEqual = std.testing.expectEqual;
3637
const expectEqualStrings = std.testing.expectEqualStrings;
3738
const expectEqualDeep = std.testing.expectEqualDeep;
3839

3940
test "GeoLite2 Country" {
40-
var db = try Reader.open_mmap(
41-
std.testing.allocator,
41+
var db = try Reader.mmap(
42+
allocator,
4243
"test-data/test-data/GeoLite2-Country-Test.mmdb",
4344
);
44-
defer db.close();
45+
defer db.unmap();
4546

4647
const ip = try std.net.Address.parseIp("89.160.20.128", 0);
47-
const got = try db.lookup(geolite2.Country, &ip);
48+
const got = try db.lookup(allocator, geolite2.Country, &ip);
4849
defer got.deinit();
4950

5051
try expectEqualStrings("EU", got.continent.code);
@@ -77,14 +78,14 @@ test "GeoLite2 Country" {
7778
}
7879

7980
test "GeoLite2 City" {
80-
var db = try Reader.open_mmap(
81-
std.testing.allocator,
81+
var db = try Reader.mmap(
82+
allocator,
8283
"test-data/test-data/GeoLite2-City-Test.mmdb",
8384
);
84-
defer db.close();
85+
defer db.unmap();
8586

8687
const ip = try std.net.Address.parseIp("89.160.20.128", 0);
87-
const got = try db.lookup(geolite2.City, &ip);
88+
const got = try db.lookup(allocator, geolite2.City, &ip);
8889
defer got.deinit();
8990

9091
try expectEqual(2694762, got.city.geoname_id);
@@ -146,14 +147,14 @@ test "GeoLite2 City" {
146147
}
147148

148149
test "GeoLite2 ASN" {
149-
var db = try Reader.open_mmap(
150-
std.testing.allocator,
150+
var db = try Reader.mmap(
151+
allocator,
151152
"test-data/test-data/GeoLite2-ASN-Test.mmdb",
152153
);
153-
defer db.close();
154+
defer db.unmap();
154155

155156
const ip = try std.net.Address.parseIp("89.160.20.128", 0);
156-
const got = try db.lookup(geolite2.ASN, &ip);
157+
const got = try db.lookup(allocator, geolite2.ASN, &ip);
157158

158159
const want = geolite2.ASN{
159160
.autonomous_system_number = 29518,
@@ -163,14 +164,14 @@ test "GeoLite2 ASN" {
163164
}
164165

165166
test "GeoIP2 Country" {
166-
var db = try Reader.open_mmap(
167-
std.testing.allocator,
167+
var db = try Reader.mmap(
168+
allocator,
168169
"test-data/test-data/GeoIP2-Country-Test.mmdb",
169170
);
170-
defer db.close();
171+
defer db.unmap();
171172

172173
const ip = try std.net.Address.parseIp("89.160.20.128", 0);
173-
const got = try db.lookup(geoip2.Country, &ip);
174+
const got = try db.lookup(allocator, geoip2.Country, &ip);
174175
defer got.deinit();
175176

176177
try expectEqualStrings("EU", got.continent.code);
@@ -210,14 +211,14 @@ test "GeoIP2 Country" {
210211
}
211212

212213
test "GeoIP2 City" {
213-
var db = try Reader.open_mmap(
214-
std.testing.allocator,
214+
var db = try Reader.mmap(
215+
allocator,
215216
"test-data/test-data/GeoIP2-City-Test.mmdb",
216217
);
217-
defer db.close();
218+
defer db.unmap();
218219

219220
const ip = try std.net.Address.parseIp("89.160.20.128", 0);
220-
const got = try db.lookup(geoip2.City, &ip);
221+
const got = try db.lookup(allocator, geoip2.City, &ip);
221222
defer got.deinit();
222223

223224
try expectEqual(2694762, got.city.geoname_id);
@@ -286,14 +287,14 @@ test "GeoIP2 City" {
286287
}
287288

288289
test "GeoIP2 Enterprise" {
289-
var db = try Reader.open_mmap(
290-
std.testing.allocator,
290+
var db = try Reader.mmap(
291+
allocator,
291292
"test-data/test-data/GeoIP2-Enterprise-Test.mmdb",
292293
);
293-
defer db.close();
294+
defer db.unmap();
294295

295296
const ip = try std.net.Address.parseIp("74.209.24.0", 0);
296-
const got = try db.lookup(geoip2.Enterprise, &ip);
297+
const got = try db.lookup(allocator, geoip2.Enterprise, &ip);
297298
defer got.deinit();
298299

299300
try expectEqual(11, got.city.confidence);
@@ -380,14 +381,14 @@ test "GeoIP2 Enterprise" {
380381
}
381382

382383
test "GeoIP2 ISP" {
383-
var db = try Reader.open_mmap(
384-
std.testing.allocator,
384+
var db = try Reader.mmap(
385+
allocator,
385386
"test-data/test-data/GeoIP2-ISP-Test.mmdb",
386387
);
387-
defer db.close();
388+
defer db.unmap();
388389

389390
const ip = try std.net.Address.parseIp("89.160.20.112", 0);
390-
const got = try db.lookup(geoip2.ISP, &ip);
391+
const got = try db.lookup(allocator, geoip2.ISP, &ip);
391392

392393
const want = geoip2.ISP{
393394
.autonomous_system_number = 29518,
@@ -399,14 +400,14 @@ test "GeoIP2 ISP" {
399400
}
400401

401402
test "GeoIP2 Connection-Type" {
402-
var db = try Reader.open_mmap(
403-
std.testing.allocator,
403+
var db = try Reader.mmap(
404+
allocator,
404405
"test-data/test-data/GeoIP2-Connection-Type-Test.mmdb",
405406
);
406-
defer db.close();
407+
defer db.unmap();
407408

408409
const ip = try std.net.Address.parseIp("96.1.20.112", 0);
409-
const got = try db.lookup(geoip2.ConnectionType, &ip);
410+
const got = try db.lookup(allocator, geoip2.ConnectionType, &ip);
410411

411412
const want = geoip2.ConnectionType{
412413
.connection_type = "Cable/DSL",
@@ -415,14 +416,14 @@ test "GeoIP2 Connection-Type" {
415416
}
416417

417418
test "GeoIP2 Anonymous-IP" {
418-
var db = try Reader.open_mmap(
419-
std.testing.allocator,
419+
var db = try Reader.mmap(
420+
allocator,
420421
"test-data/test-data/GeoIP2-Anonymous-IP-Test.mmdb",
421422
);
422-
defer db.close();
423+
defer db.unmap();
423424

424425
const ip = try std.net.Address.parseIp("81.2.69.0", 0);
425-
const got = try db.lookup(geoip2.AnonymousIP, &ip);
426+
const got = try db.lookup(allocator, geoip2.AnonymousIP, &ip);
426427

427428
const want = geoip2.AnonymousIP{
428429
.is_anonymous = true,
@@ -436,14 +437,14 @@ test "GeoIP2 Anonymous-IP" {
436437
}
437438

438439
test "GeoIP2 DensityIncome" {
439-
var db = try Reader.open_mmap(
440-
std.testing.allocator,
440+
var db = try Reader.mmap(
441+
allocator,
441442
"test-data/test-data/GeoIP2-DensityIncome-Test.mmdb",
442443
);
443-
defer db.close();
444+
defer db.unmap();
444445

445446
const ip = try std.net.Address.parseIp("5.83.124.123", 0);
446-
const got = try db.lookup(geoip2.DensityIncome, &ip);
447+
const got = try db.lookup(allocator, geoip2.DensityIncome, &ip);
447448

448449
const want = geoip2.DensityIncome{
449450
.average_income = 32323,
@@ -453,14 +454,14 @@ test "GeoIP2 DensityIncome" {
453454
}
454455

455456
test "GeoIP2 Domain" {
456-
var db = try Reader.open_mmap(
457-
std.testing.allocator,
457+
var db = try Reader.mmap(
458+
allocator,
458459
"test-data/test-data/GeoIP2-Domain-Test.mmdb",
459460
);
460-
defer db.close();
461+
defer db.unmap();
461462

462463
const ip = try std.net.Address.parseIp("66.92.80.123", 0);
463-
const got = try db.lookup(geoip2.Domain, &ip);
464+
const got = try db.lookup(allocator, geoip2.Domain, &ip);
464465

465466
const want = geoip2.Domain{
466467
.domain = "speakeasy.net",

0 commit comments

Comments
 (0)