Exemplo n.º 1
0
        /// <summary>
        /// RSブロックのデータコード語数を返します。
        /// </summary>
        /// <param name="ecLevel">誤り訂正レベル</param>
        /// <param name="version">型番</param>
        /// <param name="preceding">RSブロック前半部分は true を指定します。</param>
        public static int GetNumberDataCodewords(
            ErrorCorrectionLevel ecLevel, int version, bool preceding)
        {
            int numDataCodewords = DataCodeword.GetTotalNumber(ecLevel, version);
            int numRSBlocks      = _totalNumbers[(int)ecLevel][version];

            int numPreBlockCodewords = numDataCodewords / numRSBlocks;

            if (preceding)
            {
                return(numPreBlockCodewords);
            }
            else
            {
                int numPreBlocks = GetTotalNumber(ecLevel, version, true);
                int numFolBlocks = GetTotalNumber(ecLevel, version, false);

                if (numFolBlocks > 0)
                {
                    return((numDataCodewords - numPreBlockCodewords * numPreBlocks) / numFolBlocks);
                }
                else
                {
                    return(0);
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// RSブロックの誤り訂正コード語数を返します。
        /// </summary>
        /// <param name="ecLevel">誤り訂正レベル</param>
        /// <param name="version">型番</param>
        public static int GetNumberECCodewords(
            ErrorCorrectionLevel ecLevel, int version)
        {
            int numDataCodewords = DataCodeword.GetTotalNumber(ecLevel, version);
            int numRSBlocks      = _totalNumbers[(int)ecLevel][version];

            return((Codeword.GetTotalNumber(version) / numRSBlocks) -
                   (numDataCodewords / numRSBlocks));
        }
Exemplo n.º 3
0
        /// <summary>
        /// RSブロック数を返します。
        /// </summary>
        /// <param name="ecLevel">誤り訂正レベル</param>
        /// <param name="version">型番</param>
        /// <param name="preceding">RSブロック前半部分は true を指定します。</param>
        public static int GetTotalNumber(
            ErrorCorrectionLevel ecLevel, int version, bool preceding)
        {
            int numDataCodewords = DataCodeword.GetTotalNumber(ecLevel, version);
            int numRSBlocks      = _totalNumbers[(int)ecLevel][version];

            int numFolBlocks = numDataCodewords % numRSBlocks;

            if (preceding)
            {
                return(numRSBlocks - numFolBlocks);
            }
            else
            {
                return(numFolBlocks);
            }
        }