2011-06-08 69 views
0

我有一個迭代算法,用C++編寫。我正在使用yaml-cpp。在每次迭代中,我發送一些數據到YAML :: Emitter對象。當算法終止時,我使用YAML :: Emitter :: c_str()將基礎緩衝區寫入一個ofstream。YAML ::發射器流大小

但是,我寧願每隔幾百次迭代就遞增地將緩衝區寫入文件,並在每個增量上清除來自YAML :: Emitter對象的寫入數據。有兩個原因:

1)如果程序意外終止,我希望能夠訪問(儘可能)磁盤上的輸出。

2)YAML :: Emitter對象自擴展,我不想浪費內存。

這是什麼最好的方法呢?

回答

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(); 
} 
+0

謝謝,我有一個臨時的解決方案,通過創建一個新的發射器每次寫入後清除MEM,但你有什麼建議聽起來非常理想。我會提出要求。 – wjastle 2011-06-09 12:10:59