namespace Gma.QrCodeNet.Encoding.Versions; internal struct ErrorCorrectionBlocks { internal ErrorCorrectionBlocks(int numErrorCorrectionCodewords, ErrorCorrectionBlock ecBlock) : this() { NumErrorCorrectionCodewards = numErrorCorrectionCodewords; ECBlock = new ErrorCorrectionBlock[] { ecBlock }; Initialize(); } internal ErrorCorrectionBlocks(int numErrorCorrectionCodewords, ErrorCorrectionBlock ecBlock1, ErrorCorrectionBlock ecBlock2) : this() { NumErrorCorrectionCodewards = numErrorCorrectionCodewords; ECBlock = new ErrorCorrectionBlock[] { ecBlock1, ecBlock2 }; Initialize(); } internal int NumErrorCorrectionCodewards { get; private set; } internal int NumBlocks { get; private set; } internal int ErrorCorrectionCodewordsPerBlock { get; private set; } private ErrorCorrectionBlock[] ECBlock { get; } /// /// Get Error Correction Blocks /// internal ErrorCorrectionBlock[] GetECBlocks() => ECBlock; /// /// Initialize for NumBlocks and ErrorCorrectionCodewordsPerBlock /// private void Initialize() { if (ECBlock == null) throw new ArgumentNullException(nameof(ECBlock)); NumBlocks = 0; int blockLength = ECBlock.Length; for (int i = 0; i < blockLength; i++) { NumBlocks += ECBlock[i].NumErrorCorrectionBlock; } ErrorCorrectionCodewordsPerBlock = NumErrorCorrectionCodewards / NumBlocks; } }