MCPcopy Create free account
hub / github.com/TheRealMJP/DeferredTexturing / tdefl_radix_sort_syms

Function tdefl_radix_sort_syms

SampleFramework12/v1.00/TinyEXR.cpp:2668–2698  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2666// values.
2667typedef struct { mz_uint16 m_key, m_sym_index; } tdefl_sym_freq;
2668static 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.

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected