Use read_file_mapping in TextFileReader

This commit is contained in:
Thomas Goyne 2014-03-21 09:28:17 -07:00
parent 87501931f6
commit 220e6d18da
2 changed files with 11 additions and 5 deletions

View File

@ -18,16 +18,19 @@
#include "text_file_reader.h" #include "text_file_reader.h"
#include <libaegisub/io.h> #include <libaegisub/file_mapping.h>
#include <libaegisub/util.h>
#include <algorithm> #include <algorithm>
#include <boost/algorithm/string/predicate.hpp> #include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/trim.hpp> #include <boost/algorithm/string/trim.hpp>
#include <boost/interprocess/streams/bufferstream.hpp>
TextFileReader::TextFileReader(agi::fs::path const& filename, std::string encoding, bool trim) TextFileReader::TextFileReader(agi::fs::path const& filename, std::string encoding, bool trim)
: file(agi::io::Open(filename, true)) : file(agi::util::make_unique<agi::read_file_mapping>(filename))
, stream(agi::util::make_unique<boost::interprocess::bufferstream>(file->read(0, file->size()), file->size()))
, trim(trim) , trim(trim)
, iter(agi::line_iterator<std::string>(*file, encoding)) , iter(agi::line_iterator<std::string>(*stream, encoding))
{ {
} }

View File

@ -14,17 +14,20 @@
// //
// Aegisub Project http://www.aegisub.org/ // Aegisub Project http://www.aegisub.org/
#include <fstream> #include <iosfwd>
#include <memory> #include <memory>
#include <string> #include <string>
#include <libaegisub/fs_fwd.h> #include <libaegisub/fs_fwd.h>
#include <libaegisub/line_iterator.h> #include <libaegisub/line_iterator.h>
namespace agi { class read_file_mapping; }
/// @class TextFileReader /// @class TextFileReader
/// @brief A line-based text file reader /// @brief A line-based text file reader
class TextFileReader { class TextFileReader {
std::unique_ptr<std::ifstream> file; std::unique_ptr<agi::read_file_mapping> file;
std::unique_ptr<std::istream> stream;
bool trim; bool trim;
agi::line_iterator<std::string> iter; agi::line_iterator<std::string> iter;