remove redundant fields

This commit is contained in:
Motiejus Jakštys 2022-03-07 21:14:19 +02:00 committed by Motiejus Jakštys
parent 9bf0a35689
commit d2ace3e125

View File

@ -31,15 +31,12 @@ const Corpus = struct {
// sorted by gid // sorted by gid
groups: []Group, groups: []Group,
// convenience users and groups by column // columnar users and groups of the above
usersMulti: MultiArrayList(User), usersMulti: MultiArrayList(User),
groupsMulti: MultiArrayList(Group), groupsMulti: MultiArrayList(Group),
// pointing to `users` and `groups` slices above.
name2user: StringHashMap(usize), name2user: StringHashMap(usize),
uid2user: AutoHashMap(u32, usize),
name2group: StringHashMap(usize), name2group: StringHashMap(usize),
gid2group: AutoHashMap(u32, usize),
groupname2users: StringHashMap([]usize), groupname2users: StringHashMap([]usize),
username2groups: StringHashMap([]usize), username2groups: StringHashMap([]usize),
@ -72,20 +69,12 @@ const Corpus = struct {
groupsMulti.appendAssumeCapacity(group); groupsMulti.appendAssumeCapacity(group);
var name2user = StringHashMap(usize).init(allocator); var name2user = StringHashMap(usize).init(allocator);
var uid2user = AutoHashMap(u32, usize).init(allocator);
var name2group = StringHashMap(usize).init(allocator); var name2group = StringHashMap(usize).init(allocator);
var gid2group = AutoHashMap(u32, usize).init(allocator);
for (users) |*user, i| { for (users) |*user, i| {
var res1 = try name2user.getOrPut(user.name); var res1 = try name2user.getOrPut(user.name);
if (res1.found_existing) if (res1.found_existing)
return error.Duplicate; return error.Duplicate;
res1.value_ptr.* = i; res1.value_ptr.* = i;
var res2 = try uid2user.getOrPut(user.uid);
if (res2.found_existing)
return error.Duplicate;
res2.value_ptr.* = i;
} }
for (groups) |*group, i| { for (groups) |*group, i| {
@ -93,10 +82,6 @@ const Corpus = struct {
if (res1.found_existing) if (res1.found_existing)
return error.Duplicate; return error.Duplicate;
res1.value_ptr.* = i; res1.value_ptr.* = i;
var res2 = try gid2group.getOrPut(group.gid);
if (res2.found_existing)
return error.Duplicate;
res2.value_ptr.* = i;
} }
var groupname2users = StringHashMap([]usize).init(allocator); var groupname2users = StringHashMap([]usize).init(allocator);
@ -157,9 +142,7 @@ const Corpus = struct {
.usersMulti = usersMulti, .usersMulti = usersMulti,
.groupsMulti = groupsMulti, .groupsMulti = groupsMulti,
.name2user = name2user, .name2user = name2user,
.uid2user = uid2user,
.name2group = name2group, .name2group = name2group,
.gid2group = gid2group,
.groupname2users = groupname2users, .groupname2users = groupname2users,
.username2groups = username2groups_final, .username2groups = username2groups_final,
}; };
@ -525,12 +508,8 @@ test "test corpus" {
try testing.expectEqual(corpus.name2user.get("404"), null); try testing.expectEqual(corpus.name2user.get("404"), null);
try testing.expectEqual(corpus.name2user.get("vidmantas").?, vidmantas); try testing.expectEqual(corpus.name2user.get("vidmantas").?, vidmantas);
try testing.expectEqual(corpus.uid2user.get(42), null);
try testing.expectEqual(corpus.uid2user.get(128).?, vidmantas);
try testing.expectEqual(corpus.name2group.get("404"), null); try testing.expectEqual(corpus.name2group.get("404"), null);
try testing.expectEqual(corpus.name2group.get("vidmantas").?, g_vidmantas); try testing.expectEqual(corpus.name2group.get("vidmantas").?, g_vidmantas);
try testing.expectEqual(corpus.gid2group.get(42), null);
try testing.expectEqual(corpus.gid2group.get(128).?, g_vidmantas);
const membersOfAll = corpus.groupname2users.get("all").?; const membersOfAll = corpus.groupname2users.get("all").?;
try testing.expectEqual(membersOfAll[0], name_name); try testing.expectEqual(membersOfAll[0], name_name);