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 ResetRefinementStats(int template, ArithmeticDecoderStats previousStats)
        {
            int size = referredToContextSize[template];

            if (previousStats != null && previousStats.GetContextSize() == size)
            {
                if (refinementRegionStats.GetContextSize() == size)
                {
                    refinementRegionStats.Overwrite(previousStats);
                }
                else
                {
                    refinementRegionStats = previousStats.Copy();
                }
            }
            else
            {
                if (refinementRegionStats.GetContextSize() == size)
                {
                    refinementRegionStats.Reset();
                }
                else
                {
                    refinementRegionStats = new ArithmeticDecoderStats(1 << size);
                }
            }
        }