mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
72 lines
1.9 KiB
C++
72 lines
1.9 KiB
C++
// File: lzham_lzbase.cpp
|
|
// See Copyright Notice and license at the end of include/lzham.h
|
|
#include "include/lzham_core.h"
|
|
#include "include/lzham_lzbase.h"
|
|
|
|
namespace lzham
|
|
{
|
|
void CLZBase::init_slot_tabs()
|
|
{
|
|
for (uint i = 0; i < m_num_lzx_slots; i++)
|
|
{
|
|
//printf("%u: 0x%08X - 0x%08X, %u\n", i, m_lzx_position_base[i], m_lzx_position_base[i] + (1 << m_lzx_position_extra_bits[i]) - 1, m_lzx_position_extra_bits[i]);
|
|
|
|
uint lo = m_lzx_position_base[i];
|
|
uint hi = lo + m_lzx_position_extra_mask[i];
|
|
|
|
uint8* pTab;
|
|
uint shift;
|
|
uint n; LZHAM_NOTE_UNUSED(n);
|
|
|
|
if (hi < 0x1000)
|
|
{
|
|
pTab = m_slot_tab0;
|
|
shift = 0;
|
|
n = sizeof(m_slot_tab0);
|
|
}
|
|
else if (hi < 0x100000)
|
|
{
|
|
pTab = m_slot_tab1;
|
|
shift = 11;
|
|
n = sizeof(m_slot_tab1);
|
|
}
|
|
else if (hi < 0x1000000)
|
|
{
|
|
pTab = m_slot_tab2;
|
|
shift = 16;
|
|
n = sizeof(m_slot_tab2);
|
|
}
|
|
else
|
|
break;
|
|
|
|
lo >>= shift;
|
|
hi >>= shift;
|
|
|
|
LZHAM_ASSERT(hi < n);
|
|
memset(pTab + lo, (uint8)i, hi - lo + 1);
|
|
}
|
|
|
|
#ifdef LZHAM_BUILD_DEBUG
|
|
uint slot, ofs;
|
|
for (uint i = 1; i < m_num_lzx_slots; i++)
|
|
{
|
|
compute_lzx_position_slot(m_lzx_position_base[i], slot, ofs);
|
|
LZHAM_ASSERT(slot == i);
|
|
|
|
compute_lzx_position_slot(m_lzx_position_base[i] + m_lzx_position_extra_mask[i], slot, ofs);
|
|
LZHAM_ASSERT(slot == i);
|
|
}
|
|
|
|
for (uint i = 1; i <= (m_dict_size-1); i += 512U*1024U)
|
|
{
|
|
compute_lzx_position_slot(i, slot, ofs);
|
|
LZHAM_ASSERT(i == m_lzx_position_base[slot] + ofs);
|
|
}
|
|
|
|
compute_lzx_position_slot(m_dict_size - 1, slot, ofs);
|
|
LZHAM_ASSERT((m_dict_size - 1) == m_lzx_position_base[slot] + ofs);
|
|
#endif
|
|
}
|
|
} //namespace lzham
|
|
|