map<K, V, InputK, InputV> static method
Implementation
static BcsType<Map<K, V>, Map<InputK, InputV>> map<K, V, InputK, InputV>(
BcsType<K, InputK> keyType, BcsType<V, InputV> valueType) {
return BcsType<Map<K, V>, Map<InputK, InputV>>(
name: 'Map<${keyType.name}, ${valueType.name}>',
read: (reader) {
final length = reader.readULEB();
final result = <K, V>{};
for (var i = 0; i < length; i++) {
final k = keyType.read(reader);
final v = valueType.read(reader);
result[k] = v;
}
return result;
},
write: (value, writer) {
// Sort entries by serialized key bytes for canonical map order.
final entries = value.entries
.map((e) => [keyType.serialize(e.key).toBytes(), e.value])
.toList();
entries.sort(
(a, b) => compareBcsBytes(a[0] as Uint8List, b[0] as Uint8List));
writer.writeULEB(entries.length);
for (final entry in entries) {
writer.writeBytes(entry[0] as Uint8List);
valueType.write(entry[1] as InputV, writer);
}
},
);
}