concatenation

一時はお蔵入りかと思われたhamigaki::iostreams::concatenationですが、hamigaki::iostreams::lazy_restrictionのおかげで復活しました。
ただ、

manager.copy(
    io_ex::concatenate(
        io_ex::concatenate(
            io_ex::lazy_restrict(vf, 0, offset+len),
            io_ex::loop(
                io_ex::lazy_restrict(vf, offset, len),
                loop_count
            )
        ),
        io_ex::lazy_restrict(vf, offset+len)
    ),
    pcm
);

みたいに、concatenateが入れ子になると非常に読みにくいのです。
そこで、id:Cryolite:20051129 さんの記事を参考にオペレータのオーバーロードを追加してみました。

using namespace io_ex::cat_operators; // シンタックス・シュガーを導入
manager.copy(
    io_ex::lazy_restrict(vf, 0, offset+len)
    + io_ex::loop(io_ex::lazy_restrict(vf, offset, len),loop_count)
    + io_ex::lazy_restrict(vf, offset+len),
    pcm
);

随分すっきりしました。

今日の成果物