YAML:: Размер потока эмиттера

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

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

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

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

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


person wjastle    schedule 08.06.2011    source источник


Ответы (1)


Похоже, вам нужен подключаемый модуль записи для 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();
}
person Jesse Beder    schedule 08.06.2011
comment
Спасибо, у меня есть временное решение, чтобы очистить память, создавая новый эмиттер после каждой записи, но то, что вы предлагаете, звучит идеально. Я сделаю запрос. - person wjastle; 09.06.2011