123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- #region Using
- #endregion
- namespace SharpCompress.Compressors.PPMd.I1
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
- internal struct PpmState
- {
- public uint _address;
- public byte[] _memory;
- public static readonly PpmState ZERO = new PpmState(0, null);
- public const int SIZE = 6;
-
-
-
- public PpmState(uint address, byte[] memory)
- {
- _address = address;
- _memory = memory;
- }
-
-
-
- public byte Symbol { get => _memory[_address]; set => _memory[_address] = value; }
-
-
-
- public byte Frequency { get => _memory[_address + 1]; set => _memory[_address + 1] = value; }
-
-
-
- public Model.PpmContext Successor
- {
- get => new Model.PpmContext(
- _memory[_address + 2] | ((uint)_memory[_address + 3]) << 8 |
- ((uint)_memory[_address + 4]) << 16 | ((uint)_memory[_address + 5]) << 24, _memory);
- set
- {
- _memory[_address + 2] = (byte)value._address;
- _memory[_address + 3] = (byte)(value._address >> 8);
- _memory[_address + 4] = (byte)(value._address >> 16);
- _memory[_address + 5] = (byte)(value._address >> 24);
- }
- }
-
-
-
-
-
-
- public PpmState this[int offset] => new PpmState((uint)(_address + offset * SIZE), _memory);
-
-
-
-
-
- public static implicit operator PpmState(Pointer pointer)
- {
- return new PpmState(pointer._address, pointer._memory);
- }
-
-
-
-
-
-
- public static PpmState operator +(PpmState state, int offset)
- {
- state._address = (uint)(state._address + offset * SIZE);
- return state;
- }
-
-
-
-
-
- public static PpmState operator ++(PpmState state)
- {
- state._address += SIZE;
- return state;
- }
-
-
-
-
-
-
- public static PpmState operator -(PpmState state, int offset)
- {
- state._address = (uint)(state._address - offset * SIZE);
- return state;
- }
-
-
-
-
-
- public static PpmState operator --(PpmState state)
- {
- state._address -= SIZE;
- return state;
- }
-
-
-
-
-
-
- public static bool operator <=(PpmState state1, PpmState state2)
- {
- return state1._address <= state2._address;
- }
-
-
-
-
-
-
- public static bool operator >=(PpmState state1, PpmState state2)
- {
- return state1._address >= state2._address;
- }
-
-
-
-
-
-
- public static bool operator ==(PpmState state1, PpmState state2)
- {
- return state1._address == state2._address;
- }
-
-
-
-
-
-
- public static bool operator !=(PpmState state1, PpmState state2)
- {
- return state1._address != state2._address;
- }
-
-
-
-
-
- public override bool Equals(object obj)
- {
- if (obj is PpmState)
- {
- PpmState state = (PpmState)obj;
- return state._address == _address;
- }
- return base.Equals(obj);
- }
-
-
-
-
- public override int GetHashCode()
- {
- return _address.GetHashCode();
- }
- }
- }
|