拡張可能なヘッダ

う〜ん。
iso_file_sourceのコードですが、どこを弄ったらよいやら分からなくなってきたので明確な目標を設定したいと思います。

  • SUSP(System Use Sharing Protocol)に基づいたRock Ridge以外の(あるいはRock Ridgeを拡張した)プロトコルを簡単に追加できること
  • プロトコル毎に別の型のエントリヘッダを使用できること
  • 上記の条件を満たしつつ、カスタマイズする箇所以外のコードはライブラリが提供すること


具体例としては、「Amiga Extensions on Rock Ridge」を追加で実装できればよいと思います。
おそらく、同様の仕組みはLHAやZIPなどの拡張ヘッダにも利用できるでしょうから、そちらにも反映させたいですね。


SUSPでは各System Use Entryの種類を二文字のシグネチャで区別するので、

struct nm_parser
{
    template<class Header>
    void operator()(Header& head, const char* data, std::size_t size)
    {
        // ...
    }
};

struct cl_parser;
struct pl_parser;
struct re_parser;

typedef boost::mpl::map<
    boost::mpl::pair<'NM', nm_parser>,
    boost::mpl::pair<'CL', cl_parser>,
    boost::mpl::pair<'PL', pl_parser>,
    boost::mpl::pair<'RE', re_parser>
> rock_ridge_parser;

みたいな感じでいけると思います。(多文字リテラルを使っているのは説明のため)
これを組み込めるようにコードを調整してみます。