pack method
Implementation
void pack(IsoMsg message, IsoBuffer buffer) {
final Map<int, IsoComponent<Object>> fields = message.children;
final int first = firstField;
final IsoComponent<Object>? mti = fields[0];
if (first > 0 && mti != null && fieldPackagers[0] is! IsoBitMapPackager) fieldPackagers[0]!.pack(mti, buffer);
IsoBitSet? tertiary;
if (emitsBitmap) {
final IsoComponent<Object> bitmapComponent = fields[bitmapFieldIndex]!;
final IsoBitSet primary = bitmapComponent.value! as IsoBitSet;
if (thirdBitmapField >= 0 && fieldPackagers[thirdBitmapField] is IsoBitMapPackager) {
if (primary.length - 1 > 128) {
tertiary = primary.range(128, 193);
tertiary.clear(0);
primary.set(thirdBitmapField);
primary.clearRange(129, 193);
final IsoBitMapField tertiaryField = IsoBitMapField(tertiary);
message.setComponent(thirdBitmapField, tertiaryField);
fields[thirdBitmapField] = tertiaryField;
primary.set(65, fields[65] != null);
} else {
message.unset(thirdBitmapField);
primary.clear(thirdBitmapField);
fields.remove(thirdBitmapField);
}
}
fieldPackagers[bitmapFieldIndex]!.pack(bitmapComponent, buffer);
}
final int ceiling = tertiary != null || fieldPackagers.length > 129 ? 192 : 128;
final int highest = message.maxField < ceiling ? message.maxField : ceiling;
for (int i = first; i <= highest; i++) {
final IsoComponent<Object>? component = fields[i];
if (component == null) continue;
final IsoFieldPackager? packager = fieldPackagers[i];
if (packager == null) throw IsoFieldException(i, "null field $i packager");
try {
packager.pack(component, buffer);
} catch (error) {
throw IsoFieldException(i, "error packing field $i", error);
}
}
}