void CLZDecompBase::init_position_slots(uint dict_size_log2) { LZHAM_ASSERT(dict_size_log2 >= LZHAM_MIN_DICT_SIZE_LOG2); LZHAM_ASSERT(dict_size_log2 <= LZHAM_MAX_DICT_SIZE_LOG2_X64); LZHAM_ASSERT((sizeof(g_table_update_settings) / sizeof(g_table_update_settings[0])) == LZHAM_FASTEST_TABLE_UPDATE_RATE); //for (dict_size_log2 = LZHAM_MIN_DICT_SIZE_LOG2; dict_size_log2 <= LZHAM_MAX_DICT_SIZE_LOG2_X64; dict_size_log2++) { m_dict_size_log2 = dict_size_log2; m_dict_size = 1U << dict_size_log2; m_num_lzx_slots = g_num_lzx_position_slots[dict_size_log2 - LZHAM_MIN_DICT_SIZE_LOG2]; #if 0 int i, j; for (i = 0, j = 0; i < cLZXMaxPositionSlots; i += 2) { m_lzx_position_extra_bits[i] = (uint8)j; m_lzx_position_extra_bits[i + 1] = (uint8)j; if ((i != 0) && (j < 25)) j++; } for (i = 0, j = 0; i < cLZXMaxPositionSlots; i++) { m_lzx_position_base[i] = j; m_lzx_position_extra_mask[i] = (1 << m_lzx_position_extra_bits[i]) - 1; j += (1 << m_lzx_position_extra_bits[i]); } for (uint i = 0; i < cLZXMaxPositionSlots; i++) { printf("0x%X, ", m_lzx_position_base[i]); if ((i & 15) == 15) printf("\n"); } #endif #if 0 m_num_lzx_slots = 0; const uint largest_dist = m_dict_size - 1; for (i = 0; i < cLZXMaxPositionSlots; i++) { if ( (largest_dist >= m_lzx_position_base[i]) && (largest_dist < (m_lzx_position_base[i] + (1 << m_lzx_position_extra_bits[i])) ) ) { m_num_lzx_slots = i + 1; break; } } LZHAM_VERIFY(m_num_lzx_slots); #endif //printf("%u, ", m_num_lzx_slots); } }
task_pool::task_pool(uint num_threads) : m_num_threads(0), m_tasks_available(0, 32767), m_num_outstanding_tasks(0), m_exit_flag(false) { utils::zero_object(m_threads); bool status = init(num_threads); LZHAM_VERIFY(status); }
void CLZDecompBase::init_position_slots(uint dict_size_log2) { m_dict_size_log2 = dict_size_log2; m_dict_size = 1U << dict_size_log2; int i, j; for (i = 0, j = 0; i < cLZXMaxPositionSlots; i += 2) { m_lzx_position_extra_bits[i] = (uint8)j; m_lzx_position_extra_bits[i + 1] = (uint8)j; if ((i != 0) && (j < 25)) j++; } for (i = 0, j = 0; i < cLZXMaxPositionSlots; i++) { m_lzx_position_base[i] = j; m_lzx_position_extra_mask[i] = (1 << m_lzx_position_extra_bits[i]) - 1; j += (1 << m_lzx_position_extra_bits[i]); } m_num_lzx_slots = 0; const uint largest_dist = m_dict_size - 1; for (i = 0; i < cLZXMaxPositionSlots; i++) { if ( (largest_dist >= m_lzx_position_base[i]) && (largest_dist < (m_lzx_position_base[i] + (1 << m_lzx_position_extra_bits[i])) ) ) { m_num_lzx_slots = i + 1; break; } } LZHAM_VERIFY(m_num_lzx_slots); }