[Section] slices instead of ArrayLists
It will need to be only indexed and interated anyway.
This commit is contained in:
parent
9721e1be7f
commit
4fc54e5b65
@ -28,8 +28,8 @@ const Corpus = struct {
|
|||||||
uid2user: AutoHashMap(u32, *const User),
|
uid2user: AutoHashMap(u32, *const User),
|
||||||
name2group: StringHashMap(*const Group),
|
name2group: StringHashMap(*const Group),
|
||||||
gid2group: AutoHashMap(u32, *const Group),
|
gid2group: AutoHashMap(u32, *const Group),
|
||||||
groupname2users: StringHashMap(ArrayListUnmanaged(*const User)),
|
groupname2users: StringHashMap([]*const User),
|
||||||
username2groups: StringHashMap(ArrayListUnmanaged(*const Group)),
|
username2groups: StringHashMap([]*const Group),
|
||||||
|
|
||||||
pub const initErr = Allocator.Error ||
|
pub const initErr = Allocator.Error ||
|
||||||
error{InvalidUtf8} ||
|
error{InvalidUtf8} ||
|
||||||
@ -82,8 +82,12 @@ const Corpus = struct {
|
|||||||
res2.value_ptr.* = group;
|
res2.value_ptr.* = group;
|
||||||
}
|
}
|
||||||
|
|
||||||
var groupname2users = StringHashMap(ArrayListUnmanaged(*const User)).init(allocator);
|
var groupname2users = StringHashMap(
|
||||||
var username2groups = StringHashMap(ArrayListUnmanaged(*const Group)).init(allocator);
|
ArrayListUnmanaged(*const User),
|
||||||
|
).init(baseAllocator);
|
||||||
|
var username2groups = StringHashMap(
|
||||||
|
ArrayListUnmanaged(*const Group),
|
||||||
|
).init(baseAllocator);
|
||||||
for (groups) |*group| {
|
for (groups) |*group| {
|
||||||
var members = try ArrayListUnmanaged(*const User).initCapacity(
|
var members = try ArrayListUnmanaged(*const User).initCapacity(
|
||||||
allocator,
|
allocator,
|
||||||
@ -122,6 +126,20 @@ const Corpus = struct {
|
|||||||
sort.sort(*const Group, userGroups.items, {}, cmpGroupPtr);
|
sort.sort(*const Group, userGroups.items, {}, cmpGroupPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var groupname2users_final = StringHashMap([]*const User).init(allocator);
|
||||||
|
for (groups) |group| {
|
||||||
|
const groupUsers = groupname2users.get(group.name).?.toOwnedSlice(allocator);
|
||||||
|
try groupname2users_final.put(group.name, groupUsers);
|
||||||
|
}
|
||||||
|
groupname2users.deinit();
|
||||||
|
|
||||||
|
var username2groups_final = StringHashMap([]*const Group).init(allocator);
|
||||||
|
for (users) |user| {
|
||||||
|
const userGroups = username2groups.get(user.name).?.toOwnedSlice(allocator);
|
||||||
|
try username2groups_final.put(user.name, userGroups);
|
||||||
|
}
|
||||||
|
username2groups.deinit();
|
||||||
|
|
||||||
return Corpus{
|
return Corpus{
|
||||||
.arena = arena,
|
.arena = arena,
|
||||||
.users = users,
|
.users = users,
|
||||||
@ -130,8 +148,8 @@ const Corpus = struct {
|
|||||||
.uid2user = uid2user,
|
.uid2user = uid2user,
|
||||||
.name2group = name2group,
|
.name2group = name2group,
|
||||||
.gid2group = gid2group,
|
.gid2group = gid2group,
|
||||||
.groupname2users = groupname2users,
|
.groupname2users = groupname2users_final,
|
||||||
.username2groups = username2groups,
|
.username2groups = username2groups_final,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,13 +306,13 @@ test "test corpus" {
|
|||||||
try testing.expectEqual(corpus.gid2group.get(42), null);
|
try testing.expectEqual(corpus.gid2group.get(42), null);
|
||||||
try testing.expectEqual(corpus.gid2group.get(1000).?.gid, 1000);
|
try testing.expectEqual(corpus.gid2group.get(1000).?.gid, 1000);
|
||||||
|
|
||||||
const membersOfAll = corpus.groupname2users.get("all").?.items;
|
const membersOfAll = corpus.groupname2users.get("all").?;
|
||||||
try testing.expectEqualStrings(membersOfAll[0].name, "Name" ** 8);
|
try testing.expectEqualStrings(membersOfAll[0].name, "Name" ** 8);
|
||||||
try testing.expectEqualStrings(membersOfAll[1].name, "svc-bar");
|
try testing.expectEqualStrings(membersOfAll[1].name, "svc-bar");
|
||||||
try testing.expectEqualStrings(membersOfAll[2].name, "vidmantas");
|
try testing.expectEqualStrings(membersOfAll[2].name, "vidmantas");
|
||||||
try testing.expectEqual(corpus.groupname2users.get("404"), null);
|
try testing.expectEqual(corpus.groupname2users.get("404"), null);
|
||||||
|
|
||||||
const groupsOfVidmantas = corpus.username2groups.get("vidmantas").?.items;
|
const groupsOfVidmantas = corpus.username2groups.get("vidmantas").?;
|
||||||
try testing.expectEqual(groupsOfVidmantas[0].gid, 1000);
|
try testing.expectEqual(groupsOfVidmantas[0].gid, 1000);
|
||||||
try testing.expectEqual(groupsOfVidmantas[1].gid, 1234);
|
try testing.expectEqual(groupsOfVidmantas[1].gid, 1234);
|
||||||
try testing.expectEqual(groupsOfVidmantas[2].gid, 9999);
|
try testing.expectEqual(groupsOfVidmantas[2].gid, 9999);
|
||||||
|
Loading…
Reference in New Issue
Block a user