From 69d80bc2bb0fd0718fa02bbb357108d11929ab0a Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Mon, 21 Mar 2016 18:54:32 -0400 Subject: [PATCH] Datafile: Implemented ::commit --- src/Datafile.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/Datafile.cpp b/src/Datafile.cpp index 3d3b880a..6e19af7a 100644 --- a/src/Datafile.cpp +++ b/src/Datafile.cpp @@ -103,9 +103,50 @@ void Datafile::modifyInterval (const Interval& interval) //////////////////////////////////////////////////////////////////////////////// void Datafile::commit () { + // The _dirty flag indicates that the file needs to be written. if (_dirty) { + // Special case: added but no modified means just append to the file. + if (! _lines_modified.size () && + _lines_added.size ()) + { + if (_file.open ()) + { + _file.lock (); + // Write out all the added intervals. + _file.append (std::string("")); // Seek to end of file + + // Write out all the added lines. + _file.append (_lines_added); + + _lines_added.clear (); + _file.close (); + + _dirty = false; + } + } + else + { + if (_file.open ()) + { + _file.lock (); + + // Truncate the file and rewrite. + _file.truncate (); + + _file.append (std::string("")); // Seek to end of file + for (auto& line : _lines) + _file.write_raw (line + "\n"); + + // Write out all the added lines. + _file.append (_lines_added); + + _lines_added.clear (); + _file.close (); + _dirty = false; + } + } _dirty = false; }