dont_close

昨日の一時ファイルの件ですが、布団に入ったとたん、動かない原因に気が付きました。
問題はまたもやclose()にありました。

io_ex::tmp_file tmp;
io::copy(
    io::array_source(&data[0], data.size()),
    audio::make_wave_sink(tmp, fmt)
);
io::seek(tmp, 0, BOOST_IOS::beg);
io::copy(
    audio::make_wave_source(tmp),
    audio::pcm_sink(fmt, rate/5*((Bits+7)/8)*channels)
);

この場合、最初のcopy()でtmp_fileがclose()されるため、次のseek()とcopy()が動きません。
そこでclose()を呼ばないようにするdont_closeアダプタを作りました。

io_ex::tmp_file tmp;
io::copy(
    io::array_source(&data[0], data.size()),
    audio::make_wave_sink(io_ex::dont_close(tmp), fmt)
);
io::seek(tmp, 0, BOOST_IOS::beg);
io::copy(
    audio::make_wave_source(tmp),
    audio::pcm_sink(fmt, rate/5*((Bits+7)/8)*channels)
);

この例では、copy()がwave_sinkをclose()しますが、tmp_fileはclose()されません。

今日の成果物