| 2666 | // values. |
| 2667 | typedef struct { mz_uint16 m_key, m_sym_index; } tdefl_sym_freq; |
| 2668 | static tdefl_sym_freq *tdefl_radix_sort_syms(mz_uint num_syms, |
| 2669 | tdefl_sym_freq *pSyms0, |
| 2670 | tdefl_sym_freq *pSyms1) { |
| 2671 | mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2]; |
| 2672 | tdefl_sym_freq *pCur_syms = pSyms0, *pNew_syms = pSyms1; |
| 2673 | MZ_CLEAR_OBJ(hist); |
| 2674 | for (i = 0; i < num_syms; i++) { |
| 2675 | mz_uint freq = pSyms0[i].m_key; |
| 2676 | hist[freq & 0xFF]++; |
| 2677 | hist[256 + ((freq >> 8) & 0xFF)]++; |
| 2678 | } |
| 2679 | while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) |
| 2680 | total_passes--; |
| 2681 | for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) { |
| 2682 | const mz_uint32 *pHist = &hist[pass << 8]; |
| 2683 | mz_uint offsets[256], cur_ofs = 0; |
| 2684 | for (i = 0; i < 256; i++) { |
| 2685 | offsets[i] = cur_ofs; |
| 2686 | cur_ofs += pHist[i]; |
| 2687 | } |
| 2688 | for (i = 0; i < num_syms; i++) |
| 2689 | pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = |
| 2690 | pCur_syms[i]; |
| 2691 | { |
| 2692 | tdefl_sym_freq *t = pCur_syms; |
| 2693 | pCur_syms = pNew_syms; |
| 2694 | pNew_syms = t; |
| 2695 | } |
| 2696 | } |
| 2697 | return pCur_syms; |
| 2698 | } |
| 2699 | |
| 2700 | // tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat, |
| 2701 | // alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996. |
no outgoing calls
no test coverage detected