1
0
Fork 0
QuasselClient/src/qtshit/utils/QVariantMapToQVariantList.zig
2021-06-05 07:11:27 +01:00

42 lines
1.5 KiB
Zig

const std = @import("std");
const QVariant = @import("../types/QVariant.zig").QVariant;
const range = @import("./RangeIter.zig").range;
const freeQVariantList = @import("./free/freeQVariantList.zig").freeQVariantList;
pub fn QVariantMapToQVariantList(varMap: std.StringHashMap(QVariant), allocator: *std.mem.Allocator) ![]QVariant {
var variantList = try allocator.alloc(QVariant, @intCast(usize, varMap.count() * 2));
var varMapIter = varMap.iterator();
var iter = range(u32, 0, varMap.count() * 2);
while (iter.next()) |i| {
if (i % 2 == 1) continue;
var item = varMapIter.next().?;
variantList[i] = QVariant{ .String = item.key_ptr.* };
variantList[i + 1] = item.value_ptr.*;
}
return variantList;
}
test "QVariantMap -> QVariantList" {
var map = std.StringHashMap(QVariant).init(std.testing.allocator);
defer map.deinit();
// These will get free'd by freeQVariantList
var acabString = try std.testing.allocator.dupe(u8, "ACAB");
var owoString = try std.testing.allocator.dupe(u8, "owo");
try map.put(acabString, .{ .UInt = 1312 });
try map.put(owoString, .{ .Byte = 12 });
var list = try QVariantMapToQVariantList(map, std.testing.allocator);
defer freeQVariantList(list, std.testing.allocator);
try std.testing.expect(list.len == 4);
try std.testing.expectEqualStrings("ACAB", list[0].String);
try std.testing.expect(list[1].UInt == 1312);
try std.testing.expectEqualStrings("owo", list[2].String);
try std.testing.expect(list[3].Byte == 12);
}