analyzeStructLayout function

void analyzeStructLayout(
  1. AlignedStruct struct
)

Function to analyze struct layout

Implementation

void analyzeStructLayout(AlignedStruct struct) {
  final fields = [
    StructField(
        offset: 0, size: sizeOf<Int32>(), alignment: StructAlignment.align4),
    StructField(
        offset: 8, size: sizeOf<Float>(), alignment: StructAlignment.align8),
    StructField(
        offset: 16, size: sizeOf<Int32>(), alignment: StructAlignment.align2),
    StructField(
        offset: 20, size: sizeOf<Int32>(), alignment: StructAlignment.packed),
  ];

  int totalSize = 0;
  for (var field in fields) {
    final padding =
        AlignmentUtils.calculatePadding(field.offset, field.alignment.value);
    totalSize = field.nextOffset;

    stdout.write('Field at offset ${field.offset}: '
        'size ${field.size}, '
        'alignment ${field.alignment.value}, '
        'padding $padding bytes');
  }

  // Round up total size to struct alignment
  totalSize = AlignmentUtils.calculateAlignedSize(totalSize, 16);

  stdout.write('Total struct size: $totalSize bytes');
}