Class: Omnizip::Formats::Rar::Compression::PPMd::Context

Inherits:
Algorithms::PPMd7::Context show all
Defined in:
lib/omnizip/formats/rar/compression/ppmd/context.rb

Overview

RAR variant H context node in PPMd model

Adapts PPMd7 Context for RAR-specific requirements:

  • Different memory allocation strategy
  • RAR-specific escape frequency initialization
  • Modified probability update rules

Responsibilities:

  • ONE responsibility: Manage RAR PPMd variant H context
  • Track symbol statistics for RAR compression
  • Maintain context tree structure
  • Handle RAR-specific probability updates

Constant Summary collapse

RAR_INIT_ESCAPE_FREQ =

RAR variant H escape frequency constant RAR uses different initial escape frequency than PPMd7

1

Constants included from Algorithms::PPMd7::Constants

Algorithms::PPMd7::Constants::ALPHABET_SIZE, Algorithms::PPMd7::Constants::BIN_SCALE, Algorithms::PPMd7::Constants::BOT_VALUE, Algorithms::PPMd7::Constants::DEFAULT_MEM_SIZE, Algorithms::PPMd7::Constants::DEFAULT_ORDER, Algorithms::PPMd7::Constants::INIT_ESCAPE_FREQ, Algorithms::PPMd7::Constants::INTERVAL, Algorithms::PPMd7::Constants::INT_BITS, Algorithms::PPMd7::Constants::MAX_FREQ, Algorithms::PPMd7::Constants::MAX_MEM_SIZE, Algorithms::PPMd7::Constants::MAX_ORDER, Algorithms::PPMd7::Constants::MAX_STATES, Algorithms::PPMd7::Constants::MIN_MEM_SIZE, Algorithms::PPMd7::Constants::MIN_ORDER, Algorithms::PPMd7::Constants::PERIOD_BITS, Algorithms::PPMd7::Constants::PROB_TOTAL, Algorithms::PPMd7::Constants::SEE_CONTEXTS, Algorithms::PPMd7::Constants::SUFFIX_CONTEXTS, Algorithms::PPMd7::Constants::TOP_VALUE, Algorithms::PPMd7::Constants::UNIT_ALLOC_SIZE, Algorithms::PPMd7::Constants::UNIT_SIZE

Instance Attribute Summary

Attributes inherited from Algorithms::PPMd7::Context

#escape_freq, #order, #states, #suffix, #sum_freq

Instance Method Summary collapse

Methods inherited from Algorithms::PPMd7::Context

#add_symbol, #find_symbol, #needs_escape?, #num_symbols, #root?, #symbols_by_frequency, #total_freq

Constructor Details

#initialize(order, suffix = nil) ⇒ Context

Initialize a new RAR variant H context

Parameters:

  • order (Integer)

    The order of this context (depth in tree)

  • suffix (Context, nil) (defaults to: nil)

    Parent context (shorter context)



49
50
51
52
53
# File 'lib/omnizip/formats/rar/compression/ppmd/context.rb', line 49

def initialize(order, suffix = nil)
  super
  # RAR variant H uses different escape frequency initialization
  @escape_freq = RAR_INIT_ESCAPE_FREQ
end

Instance Method Details

#update_symbol(symbol, increment = 1) ⇒ void

This method returns an undefined value.

Update symbol frequency after encoding/decoding (RAR variant)

RAR variant H uses a slightly different update strategy compared to standard PPMd7.

Parameters:

  • symbol (Integer)

    The symbol to update

  • increment (Integer) (defaults to: 1)

    Amount to increase frequency



63
64
65
66
67
68
69
70
71
72
73
# File 'lib/omnizip/formats/rar/compression/ppmd/context.rb', line 63

def update_symbol(symbol, increment = 1)
  state = @states[symbol]
  return unless state

  # RAR variant H frequency update
  state.freq += increment
  @sum_freq += increment

  # RAR uses different rescaling threshold
  rescale_frequencies if @sum_freq > rar_max_freq
end