parseStructureArray static method
AsyncBag<Structure?>
parseStructureArray(
- DC data,
- int offset,
- int length,
- DistributedConnection connection,
Implementation
static AsyncBag<Structure?> parseStructureArray(
DC data, int offset, int length, DistributedConnection connection) {
var reply = new AsyncBag<Structure?>();
if (length == 0) {
reply.seal();
return reply;
}
var end = offset + length;
var result = data[offset++];
AsyncReply<Structure?>? previous = null;
// string[] previousKeys = null;
// DataType[] previousTypes = null;
StructureMetadata metadata = new StructureMetadata();
if (result == StructureComparisonResult.Null)
previous = new AsyncReply<Structure?>.ready(null);
else if (result == StructureComparisonResult.Structure) {
int cs = data.getUint32(offset);
offset += 4;
previous = parseStructure(data, offset, cs, connection, metadata);
offset += cs;
}
reply.add(previous as AsyncReply<Structure?>);
while (offset < end) {
result = data[offset++];
if (result == StructureComparisonResult.Null)
previous = new AsyncReply<Structure?>.ready(null);
else if (result == StructureComparisonResult.Structure) {
int cs = data.getUint32(offset);
offset += 4;
previous = parseStructure(data, offset, cs, connection,
metadata); // out previousKeys, out previousTypes);
offset += cs;
} else if (result == StructureComparisonResult.StructureSameKeys) {
int cs = data.getUint32(offset);
offset += 4;
previous = parseStructure(
data, offset, cs, connection, metadata, metadata.keys);
offset += cs;
} else if (result == StructureComparisonResult.StructureSameTypes) {
int cs = data.getUint32(offset);
offset += 4;
previous = parseStructure(data, offset, cs, connection, metadata,
metadata.keys, metadata.types);
offset += cs;
}
reply.add(previous as AsyncReply<Structure?>);
}
reply.seal();
return reply;
}