YAML :: Размер излучающего потока - PullRequest
0 голосов
/ 08 июня 2011

У меня есть итерационный алгоритм, написанный на C ++.Я использую yaml-cpp .На каждой итерации я отправляю данные в объект YAML :: Emitter.Когда алгоритм завершается, я использую YAML :: Emitter :: c_str () для записи основного буфера в поток.

Однако я бы предпочел записывать буфер в файл постепенно, каждые несколько сотен итераций, и при каждом увеличении очищать записанные данные из объекта YAML :: Emitter.Для этого есть две причины:

1) Если программа неожиданно завершает работу, я хочу иметь доступ (как можно больше) к выходным данным на диске.

2) Объект YAML :: Emitter саморасширяется, и я не хочу тратить впустую память.

Как лучше всего это сделать?

1 Ответ

0 голосов
/ 08 июня 2011

Звучит так, как будто вы хотите подключаемый «писатель» для 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();
}
...