Rokiのチラ裏

学生による学習のログ

TMP によるコンパイル時ハフマンエンコーダー(Compile time huffman encoder)

何となく書いて見た。テンプレートメタプログラミングによって、コンパイル時にハフマンツリーを構築し各記号を符号化して生成する。

以下のサンプルコードで標準出力以外は全てコンパイル時に行われる。
exp:

#include<srook/mpl/cxx17/huffman_coding/huffman_encode.hpp>
#include<iostream>
#include<boost/type_index.hpp>

template<class T>
inline void type_print()
{
    std::cout<<boost::typeindex::type_id<T>().pretty_name()<<std::endl;
}

int main()
{       
    using value=srook::huffman_coding::pack<'A','D','B','C','B','A','B','C','B','B','C','E'>; 
    type_print<value>();
        
    type_print< srook::huffman_coding::huffman_encode<value> >();
}

output:

srook::huffman_coding::(anonymous namespace)::pack<(char)65, (char)68, (char)66, (char)67, (char)66, (char)65, (char)66, (char)67, (char)66, (char)66, (char)67, (char)69>
srook::huffman_coding::(anonymous namespace)::pack<true, true, false, true, true, true, false, false, true, false, false, true, true, false, false, true, false, false, false, true, false, true, true, true, true>

出力がtruefalseになっているがそれぞれを単に1と0に読み替えれば良い。