public void ResetGenericStats(int template, ArithmeticDecoderStats previousStats)
        {
            int size = contextSize[template];

            if (previousStats != null && previousStats.GetContextSize() == size)
            {
                if (genericRegionStats.GetContextSize() == size)
                {
                    genericRegionStats.Overwrite(previousStats);
                }
                else
                {
                    genericRegionStats = previousStats.Copy();
                }
            }
            else
            {
                if (genericRegionStats.GetContextSize() == size)
                {
                    genericRegionStats.Reset();
                }
                else
                {
                    genericRegionStats = new ArithmeticDecoderStats(1 << size);
                }
            }
        }
        public void ResetIntStats(int symbolCodeLength)
        {
            iadhStats.Reset();
            iadwStats.Reset();
            iaexStats.Reset();
            iaaiStats.Reset();
            iadtStats.Reset();
            iaitStats.Reset();
            iafsStats.Reset();
            iadsStats.Reset();
            iardxStats.Reset();
            iardyStats.Reset();
            iardwStats.Reset();
            iardhStats.Reset();
            iariStats.Reset();

            if (iaidStats.GetContextSize() == 1 << (symbolCodeLength + 1))
            {
                iaidStats.Reset();
            }
            else
            {
                iaidStats = new ArithmeticDecoderStats(1 << (symbolCodeLength + 1));
            }
        }