YAML ::发射器流大小

时间:2011-06-08 16:49:14

标签: c++ file-io yaml ostream yaml-cpp

我有一个用C ++编写的迭代算法。我正在使用yaml-cpp。在每次迭代中,我发送一些数据到YAML :: Emitter对象。当算法终止时,我使用YAML :: Emitter :: c_str()将底层缓冲区写入ofstream。

但是,我宁愿每隔几百次迭代逐步将缓冲区写入文件,并且每次增加都会清除YAML :: Emitter对象的写入数据。这有两个原因:

1)如果程序意外终止,我希望能够访问(尽可能多)磁盘上的输出。

2)YAML :: Emitter对象自我扩展,我不想浪费内存。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

听起来你想要YAML::Emitter的可插拔“作家” - 如果是这样,请在http://code.google.com/p/yaml-cpp/issues/list提交功能请求。

(我不能保证我能多快得到它,但我也乐意接受补丁。)

与此同时,您可以对发射器的c_str()size()方法进行标记组合,几乎可以执行您想要的操作(除了清除发射器的内存之外的所有内容):

YAML::Emitter emitter;
std::size_t bytesWritten = 0;
while(1) {
   fetch_more_data(emitter);
   file.append(emitter.c_str() + bytesWritten);
   bytesWritten = emitter.size();
}