parseStructure static method
AsyncReply<Structure>
parseStructure(
- DC data,
- int offset,
- int length,
- DistributedConnection connection, [
- StructureMetadata? metadata = null,
- List<
String> ? keys = null, - List<
int> ? types = null,
Implementation
static AsyncReply<Structure> parseStructure(
DC data, int offset, int length, DistributedConnection connection,
[StructureMetadata? metadata = null,
List<String>? keys = null,
List<int>? types =
null]) // out string[] parsedKeys, out DataType[] parsedTypes, string[] keys = null, DataType[] types = null)
{
var reply = new AsyncReply<Structure>();
var bag = new AsyncBag<dynamic>();
var keylist = <String>[];
var typelist = <int>[];
var sizeObject = new SizeObject();
if (keys == null) {
while (length > 0) {
var len = data[offset++];
keylist.add(data.getString(offset, len));
offset += len;
typelist.add(data[offset]);
bag.add(Codec.parse(data, offset, connection, sizeObject));
length -= sizeObject.size + len + 1;
offset += sizeObject.size;
}
} else if (types == null) {
keylist.addAll(keys);
while (length > 0) {
typelist.add(data[offset]);
bag.add(Codec.parse(data, offset, connection, sizeObject));
length -= sizeObject.size;
offset += sizeObject.size;
}
} else {
keylist.addAll(keys);
typelist.addAll(types);
var i = 0;
while (length > 0) {
bag.add(parse(data, offset, connection, sizeObject, types[i]));
length -= sizeObject.size;
offset += sizeObject.size;
i++;
}
}
bag.seal();
bag.then((res) {
// compose the list
var s = new Structure();
for (var i = 0; i < keylist.length; i++) s[keylist[i]] = res[i];
reply.trigger(s);
});
if (metadata != null) {
metadata.keys = keylist;
metadata.types = typelist;
}
return reply;
}