42 lines
1.5 KiB
Zig
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);
|
|
}
|
|
|