Return the ifstream from agi::io::Open by move
This commit is contained in:
parent
d99647ba28
commit
1f5484fedb
21 changed files with 61 additions and 73 deletions
|
@ -48,24 +48,24 @@ public:
|
||||||
: nsUniversalDetector(NS_FILTER_ALL)
|
: nsUniversalDetector(NS_FILTER_ALL)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::ifstream> fp(agi::io::Open(file, true));
|
std::ifstream fp(agi::io::Open(file, true));
|
||||||
|
|
||||||
// If it's over 100 MB it's either binary or big enough that we won't
|
// If it's over 100 MB it's either binary or big enough that we won't
|
||||||
// be able to do anything useful with it anyway
|
// be able to do anything useful with it anyway
|
||||||
fp->seekg(0, std::ios::end);
|
fp.seekg(0, std::ios::end);
|
||||||
if (fp->tellg() > 100 * 1024 * 1024) {
|
if (fp.tellg() > 100 * 1024 * 1024) {
|
||||||
list.emplace_back(1.f, "binary");
|
list.emplace_back(1.f, "binary");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
fp->seekg(0, std::ios::beg);
|
fp.seekg(0, std::ios::beg);
|
||||||
|
|
||||||
std::streamsize binaryish = 0;
|
std::streamsize binaryish = 0;
|
||||||
std::streamsize bytes = 0;
|
std::streamsize bytes = 0;
|
||||||
|
|
||||||
while (!mDone && *fp) {
|
while (!mDone && fp) {
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
fp->read(buf, sizeof(buf));
|
fp.read(buf, sizeof(buf));
|
||||||
std::streamsize read = fp->gcount();
|
std::streamsize read = fp.gcount();
|
||||||
HandleData(buf, (PRUint32)read);
|
HandleData(buf, (PRUint32)read);
|
||||||
|
|
||||||
// A dumb heuristic to detect binary files
|
// A dumb heuristic to detect binary files
|
||||||
|
|
|
@ -30,18 +30,16 @@
|
||||||
namespace agi {
|
namespace agi {
|
||||||
namespace io {
|
namespace io {
|
||||||
|
|
||||||
std::ifstream* Open(fs::path const& file, bool binary) {
|
std::ifstream Open(fs::path const& file, bool binary) {
|
||||||
LOG_D("agi/io/open/file") << file;
|
LOG_D("agi/io/open/file") << file;
|
||||||
acs::CheckFileRead(file);
|
acs::CheckFileRead(file);
|
||||||
|
|
||||||
auto stream = new boost::filesystem::ifstream(file, (binary ? std::ios::binary : std::ios::in));
|
boost::filesystem::ifstream stream(file, (binary ? std::ios::binary : std::ios::in));
|
||||||
|
|
||||||
if (stream->fail()) {
|
if (stream.fail())
|
||||||
delete stream;
|
|
||||||
throw IOFatal("Unknown fatal error as occurred");
|
throw IOFatal("Unknown fatal error as occurred");
|
||||||
}
|
|
||||||
|
|
||||||
return stream;
|
return std::move(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
Save::Save(fs::path const& file, bool binary)
|
Save::Save(fs::path const& file, bool binary)
|
||||||
|
|
|
@ -21,22 +21,18 @@
|
||||||
#include "libaegisub/json.h"
|
#include "libaegisub/json.h"
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <memory>
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
#include "libaegisub/fs.h"
|
#include "libaegisub/fs.h"
|
||||||
#include "libaegisub/io.h"
|
#include "libaegisub/io.h"
|
||||||
#include "libaegisub/log.h"
|
#include "libaegisub/log.h"
|
||||||
|
|
||||||
namespace agi {
|
namespace agi { namespace json_util {
|
||||||
namespace json_util {
|
|
||||||
|
|
||||||
json::UnknownElement parse(std::istream *stream) {
|
json::UnknownElement parse(std::istream&& stream) {
|
||||||
try {
|
try {
|
||||||
std::unique_ptr<std::istream> stream_deleter(stream);
|
|
||||||
|
|
||||||
json::UnknownElement root;
|
json::UnknownElement root;
|
||||||
json::Reader::Read(root, *stream);
|
json::Reader::Read(root, stream);
|
||||||
return root;
|
return root;
|
||||||
} catch (json::Reader::ParseException& e) {
|
} catch (json::Reader::ParseException& e) {
|
||||||
LOG_E("json/parse") << "json::ParseException: " << e.what() << ", Line/offset: " << e.m_locTokenBegin.m_nLine + 1 << '/' << e.m_locTokenBegin.m_nLineOffset + 1;
|
LOG_E("json/parse") << "json::ParseException: " << e.what() << ", Line/offset: " << e.m_locTokenBegin.m_nLine + 1 << '/' << e.m_locTokenBegin.m_nLineOffset + 1;
|
||||||
|
@ -57,17 +53,16 @@ json::UnknownElement file(agi::fs::path const& file, const std::string &default_
|
||||||
}
|
}
|
||||||
catch (fs::FileNotFound const&) {
|
catch (fs::FileNotFound const&) {
|
||||||
// Not an error
|
// Not an error
|
||||||
return parse(new std::istringstream(default_config));
|
return parse(std::istringstream(default_config));
|
||||||
}
|
}
|
||||||
catch (json::Exception&) {
|
catch (json::Exception&) {
|
||||||
// Already logged in parse
|
// Already logged in parse
|
||||||
return parse(new std::istringstream(default_config));
|
return parse(std::istringstream(default_config));
|
||||||
}
|
}
|
||||||
catch (agi::Exception& e) {
|
catch (agi::Exception& e) {
|
||||||
LOG_E("json/file") << "Unexpected error when reading config file " << file << ": " << e.GetMessage();
|
LOG_E("json/file") << "Unexpected error when reading config file " << file << ": " << e.GetMessage();
|
||||||
return parse(new std::istringstream(default_config));
|
return parse(std::istringstream(default_config));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace json_util
|
} }
|
||||||
} // namespace agi
|
|
||||||
|
|
|
@ -85,8 +85,7 @@ void Save(agi::fs::path const& filename, std::vector<int> const& keyframes) {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<int> Load(agi::fs::path const& filename) {
|
std::vector<int> Load(agi::fs::path const& filename) {
|
||||||
std::unique_ptr<std::ifstream> file(io::Open(filename));
|
std::ifstream is(io::Open(filename));
|
||||||
std::istream &is(*file);
|
|
||||||
|
|
||||||
std::string header;
|
std::string header;
|
||||||
getline(is, header);
|
getline(is, header);
|
||||||
|
|
|
@ -89,8 +89,8 @@ void Options::ConfigNext(std::istream& stream) {
|
||||||
|
|
||||||
void Options::ConfigUser() {
|
void Options::ConfigUser() {
|
||||||
try {
|
try {
|
||||||
std::unique_ptr<std::istream> stream(io::Open(config_file));
|
std::ifstream stream(io::Open(config_file));
|
||||||
LoadConfig(*stream, true);
|
LoadConfig(stream, true);
|
||||||
}
|
}
|
||||||
catch (fs::FileNotFound const&) {
|
catch (fs::FileNotFound const&) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -35,15 +35,15 @@ namespace agi {
|
||||||
Thesaurus::Thesaurus(agi::fs::path const& dat_path, agi::fs::path const& idx_path)
|
Thesaurus::Thesaurus(agi::fs::path const& dat_path, agi::fs::path const& idx_path)
|
||||||
: dat(io::Open(dat_path))
|
: dat(io::Open(dat_path))
|
||||||
{
|
{
|
||||||
std::unique_ptr<std::ifstream> idx(io::Open(idx_path));
|
std::ifstream idx(io::Open(idx_path));
|
||||||
|
|
||||||
std::string encoding_name;
|
std::string encoding_name;
|
||||||
getline(*idx, encoding_name);
|
getline(idx, encoding_name);
|
||||||
std::string unused_entry_count;
|
std::string unused_entry_count;
|
||||||
getline(*idx, unused_entry_count);
|
getline(idx, unused_entry_count);
|
||||||
|
|
||||||
// Read the list of words and file offsets for those words
|
// Read the list of words and file offsets for those words
|
||||||
for (line_iterator<std::string> iter(*idx, encoding_name), end; iter != end; ++iter) {
|
for (line_iterator<std::string> iter(idx, encoding_name), end; iter != end; ++iter) {
|
||||||
std::vector<std::string> chunks;
|
std::vector<std::string> chunks;
|
||||||
boost::split(chunks, *iter, _1 == '|');
|
boost::split(chunks, *iter, _1 == '|');
|
||||||
if (chunks.size() == 2)
|
if (chunks.size() == 2)
|
||||||
|
@ -57,17 +57,17 @@ Thesaurus::~Thesaurus() { }
|
||||||
|
|
||||||
void Thesaurus::Lookup(std::string const& word, std::vector<Entry> *out) {
|
void Thesaurus::Lookup(std::string const& word, std::vector<Entry> *out) {
|
||||||
out->clear();
|
out->clear();
|
||||||
if (!dat.get()) return;
|
if (!dat) return;
|
||||||
|
|
||||||
std::map<std::string, int>::const_iterator it = offsets.find(word);
|
std::map<std::string, int>::const_iterator it = offsets.find(word);
|
||||||
if (it == offsets.end()) return;
|
if (it == offsets.end()) return;
|
||||||
|
|
||||||
dat->seekg(it->second, std::ios::beg);
|
dat.seekg(it->second, std::ios::beg);
|
||||||
if (!dat->good()) return;
|
if (!dat.good()) return;
|
||||||
|
|
||||||
// First line is the word and meaning count
|
// First line is the word and meaning count
|
||||||
std::string temp;
|
std::string temp;
|
||||||
getline(*dat, temp);
|
getline(dat, temp);
|
||||||
std::vector<std::string> header;
|
std::vector<std::string> header;
|
||||||
std::string converted(conv->Convert(temp));
|
std::string converted(conv->Convert(temp));
|
||||||
boost::split(header, converted, _1 == '|');
|
boost::split(header, converted, _1 == '|');
|
||||||
|
@ -77,7 +77,7 @@ void Thesaurus::Lookup(std::string const& word, std::vector<Entry> *out) {
|
||||||
out->resize(meanings);
|
out->resize(meanings);
|
||||||
for (int i = 0; i < meanings; ++i) {
|
for (int i = 0; i < meanings; ++i) {
|
||||||
std::vector<std::string> line;
|
std::vector<std::string> line;
|
||||||
getline(*dat, temp);
|
getline(dat, temp);
|
||||||
std::string converted(conv->Convert(temp));
|
std::string converted(conv->Convert(temp));
|
||||||
boost::split(line, converted, _1 == '|');
|
boost::split(line, converted, _1 == '|');
|
||||||
|
|
||||||
|
|
|
@ -206,18 +206,18 @@ Framerate::Framerate(fs::path const& filename)
|
||||||
: denominator(default_denominator)
|
: denominator(default_denominator)
|
||||||
, numerator(0)
|
, numerator(0)
|
||||||
{
|
{
|
||||||
scoped_ptr<std::ifstream> file(agi::io::Open(filename));
|
std::ifstream file(agi::io::Open(filename));
|
||||||
std::string encoding = agi::charset::Detect(filename);
|
std::string encoding = agi::charset::Detect(filename);
|
||||||
std::string line = *line_iterator<std::string>(*file, encoding);
|
std::string line = *line_iterator<std::string>(file, encoding);
|
||||||
if (line == "# timecode format v2") {
|
if (line == "# timecode format v2") {
|
||||||
copy(line_iterator<int>(*file, encoding), line_iterator<int>(), back_inserter(timecodes));
|
copy(line_iterator<int>(file, encoding), line_iterator<int>(), back_inserter(timecodes));
|
||||||
SetFromTimecodes();
|
SetFromTimecodes();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (line == "# timecode format v1" || line.substr(0, 7) == "Assume ") {
|
if (line == "# timecode format v1" || line.substr(0, 7) == "Assume ") {
|
||||||
if (line[0] == '#')
|
if (line[0] == '#')
|
||||||
line = *line_iterator<std::string>(*file, encoding);
|
line = *line_iterator<std::string>(file, encoding);
|
||||||
numerator = v1_parse(line_iterator<std::string>(*file, encoding), line, timecodes, last);
|
numerator = v1_parse(line_iterator<std::string>(file, encoding), line, timecodes, last);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace agi {
|
||||||
DEFINE_BASE_EXCEPTION_NOINNER(IOError, Exception)
|
DEFINE_BASE_EXCEPTION_NOINNER(IOError, Exception)
|
||||||
DEFINE_SIMPLE_EXCEPTION_NOINNER(IOFatal, IOError, "io/fatal")
|
DEFINE_SIMPLE_EXCEPTION_NOINNER(IOFatal, IOError, "io/fatal")
|
||||||
|
|
||||||
std::ifstream* Open(fs::path const& file, bool binary = false);
|
std::ifstream Open(fs::path const& file, bool binary = false);
|
||||||
|
|
||||||
class Save {
|
class Save {
|
||||||
std::ofstream *fp;
|
std::ofstream *fp;
|
||||||
|
|
|
@ -24,9 +24,8 @@ namespace agi {
|
||||||
namespace json_util {
|
namespace json_util {
|
||||||
|
|
||||||
/// Parse a JSON stream.
|
/// Parse a JSON stream.
|
||||||
/// @param stream JSON stream, this is deleted internally.
|
|
||||||
/// @return json::UnknownElement
|
/// @return json::UnknownElement
|
||||||
json::UnknownElement parse(std::istream *stream);
|
json::UnknownElement parse(std::istream&& stream);
|
||||||
|
|
||||||
/// Parse a JSON file.
|
/// Parse a JSON file.
|
||||||
/// @param file Path JSON to file
|
/// @param file Path JSON to file
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
#include "fs_fwd.h"
|
#include "fs_fwd.h"
|
||||||
|
|
||||||
#include <iosfwd>
|
#include <fstream>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -32,13 +32,13 @@ class Thesaurus {
|
||||||
/// Map of word -> byte position in the data file
|
/// Map of word -> byte position in the data file
|
||||||
std::map<std::string, int> offsets;
|
std::map<std::string, int> offsets;
|
||||||
/// Read handle to the data file
|
/// Read handle to the data file
|
||||||
std::unique_ptr<std::istream> dat;
|
std::ifstream dat;
|
||||||
/// Converter from the data file's charset to UTF-8
|
/// Converter from the data file's charset to UTF-8
|
||||||
std::unique_ptr<charset::IconvWrapper> conv;
|
std::unique_ptr<charset::IconvWrapper> conv;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// A pair of a word and synonyms for that word
|
/// A pair of a word and synonyms for that word
|
||||||
typedef std::pair<std::string, std::vector<std::string> > Entry;
|
typedef std::pair<std::string, std::vector<std::string>> Entry;
|
||||||
|
|
||||||
/// Constructor
|
/// Constructor
|
||||||
/// @param dat_path Path to data file
|
/// @param dat_path Path to data file
|
||||||
|
|
|
@ -40,11 +40,11 @@ AssAttachment::AssAttachment(agi::fs::path const& name, AssEntryGroup group)
|
||||||
filename = filename.get().substr(0, filename.get().size() - 4) + "_0" + filename.get().substr(filename.get().size() - 4);
|
filename = filename.get().substr(0, filename.get().size() - 4) + "_0" + filename.get().substr(filename.get().size() - 4);
|
||||||
|
|
||||||
std::vector<char> data;
|
std::vector<char> data;
|
||||||
std::unique_ptr<std::istream> file(agi::io::Open(name, true));
|
std::ifstream file(agi::io::Open(name, true));
|
||||||
file->seekg(0, std::ios::end);
|
file.seekg(0, std::ios::end);
|
||||||
data.resize(file->tellg());
|
data.resize(file.tellg());
|
||||||
file->seekg(0, std::ios::beg);
|
file.seekg(0, std::ios::beg);
|
||||||
file->read(&data[0], data.size());
|
file.read(&data[0], data.size());
|
||||||
|
|
||||||
entry_data = (group == ENTRY_FONT ? "fontname: " : "filename: ") + filename.get() + "\r\n";
|
entry_data = (group == ENTRY_FONT ? "fontname: " : "filename: ") + filename.get() + "\r\n";
|
||||||
entry_data = entry_data.get() + agi::ass::UUEncode(data);
|
entry_data = entry_data.get() + agi::ass::UUEncode(data);
|
||||||
|
|
|
@ -66,8 +66,8 @@ void AssStyleStorage::Load(agi::fs::path const& filename) {
|
||||||
Clear();
|
Clear();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
std::unique_ptr<std::ifstream> in(agi::io::Open(file));
|
std::ifstream in(agi::io::Open(file));
|
||||||
for (auto const& line : agi::line_iterator<std::string>(*in)) {
|
for (auto const& line : agi::line_iterator<std::string>(in)) {
|
||||||
try {
|
try {
|
||||||
style.push_back(new AssStyle(line));
|
style.push_back(new AssStyle(line));
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
|
|
|
@ -28,8 +28,6 @@
|
||||||
#include <libaegisub/io.h>
|
#include <libaegisub/io.h>
|
||||||
#include <libaegisub/charset_conv.h>
|
#include <libaegisub/charset_conv.h>
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
|
|
||||||
namespace Automation4 {
|
namespace Automation4 {
|
||||||
LuaScriptReader::LuaScriptReader(agi::fs::path const& filename)
|
LuaScriptReader::LuaScriptReader(agi::fs::path const& filename)
|
||||||
: conv(new agi::charset::IconvWrapper(CharSetDetect::GetEncoding(filename).c_str(), "utf-8", false))
|
: conv(new agi::charset::IconvWrapper(CharSetDetect::GetEncoding(filename).c_str(), "utf-8", false))
|
||||||
|
@ -41,11 +39,11 @@ namespace Automation4 {
|
||||||
|
|
||||||
const char *LuaScriptReader::Read(size_t *bytes_read) {
|
const char *LuaScriptReader::Read(size_t *bytes_read) {
|
||||||
char in_buf[512];
|
char in_buf[512];
|
||||||
file->read(in_buf, sizeof(in_buf));
|
file.read(in_buf, sizeof(in_buf));
|
||||||
|
|
||||||
const char *in = in_buf;
|
const char *in = in_buf;
|
||||||
char *out = buf;
|
char *out = buf;
|
||||||
size_t in_bytes = file->gcount();
|
size_t in_bytes = file.gcount();
|
||||||
size_t out_bytes = sizeof(buf);
|
size_t out_bytes = sizeof(buf);
|
||||||
|
|
||||||
conv->Convert(&in, &in_bytes, &out, &out_bytes);
|
conv->Convert(&in, &in_bytes, &out, &out_bytes);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
#include <libaegisub/fs_fwd.h>
|
#include <libaegisub/fs_fwd.h>
|
||||||
|
|
||||||
#include <iosfwd>
|
#include <fstream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ namespace agi { namespace charset { class IconvWrapper; } }
|
||||||
namespace Automation4 {
|
namespace Automation4 {
|
||||||
class LuaScriptReader {
|
class LuaScriptReader {
|
||||||
std::unique_ptr<agi::charset::IconvWrapper> conv;
|
std::unique_ptr<agi::charset::IconvWrapper> conv;
|
||||||
std::unique_ptr<std::istream> file;
|
std::ifstream file;
|
||||||
char buf[512];
|
char buf[512];
|
||||||
|
|
||||||
const char *Read(size_t *bytes_read);
|
const char *Read(size_t *bytes_read);
|
||||||
|
|
|
@ -302,9 +302,9 @@ void DialogShiftTimes::LoadHistory() {
|
||||||
history_box->Freeze();
|
history_box->Freeze();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
std::unique_ptr<std::istream> file(agi::io::Open(history_filename));
|
std::ifstream file(agi::io::Open(history_filename));
|
||||||
json::UnknownElement root;
|
json::UnknownElement root;
|
||||||
json::Reader::Read(root, *file);
|
json::Reader::Read(root, file);
|
||||||
*history = root;
|
*history = root;
|
||||||
|
|
||||||
for (auto& history_entry : *history)
|
for (auto& history_entry : *history)
|
||||||
|
|
|
@ -304,7 +304,7 @@ void DoCheck(bool interactive) {
|
||||||
throw VersionCheckError(from_wx(_("Could not connect to updates server.")));
|
throw VersionCheckError(from_wx(_("Could not connect to updates server.")));
|
||||||
|
|
||||||
stream << boost::format(
|
stream << boost::format(
|
||||||
"GET %s?rev=%d&rel=%d&os=%s&lang=%s&aegilang=%s HTTP/1.0\r\n"
|
"GET %s.json?rev=%d&rel=%d&os=%s&lang=%s&aegilang=%s HTTP/1.0\r\n"
|
||||||
"User-Agent: Aegisub %s\r\n"
|
"User-Agent: Aegisub %s\r\n"
|
||||||
"Host: %s\r\n"
|
"Host: %s\r\n"
|
||||||
"Accept: */*\r\n"
|
"Accept: */*\r\n"
|
||||||
|
|
|
@ -140,7 +140,7 @@ bool AegisubApp::OnInit() {
|
||||||
// Try loading configuration from the install dir if one exists there
|
// Try loading configuration from the install dir if one exists there
|
||||||
try {
|
try {
|
||||||
auto conf_local(config::path->Decode("?data/config.json"));
|
auto conf_local(config::path->Decode("?data/config.json"));
|
||||||
std::unique_ptr<std::istream> localConfig(agi::io::Open(conf_local));
|
std::ifstream localConfig(agi::io::Open(conf_local));
|
||||||
config::opt = new agi::Options(conf_local, GET_DEFAULT_CONFIG(default_config));
|
config::opt = new agi::Options(conf_local, GET_DEFAULT_CONFIG(default_config));
|
||||||
|
|
||||||
// Local config, make ?user mean ?data so all user settings are placed in install dir
|
// Local config, make ?user mean ?data so all user settings are placed in install dir
|
||||||
|
|
|
@ -91,9 +91,9 @@ void HunspellSpellChecker::ReadUserDictionary() {
|
||||||
|
|
||||||
// Read the old contents of the user's dictionary
|
// Read the old contents of the user's dictionary
|
||||||
try {
|
try {
|
||||||
std::unique_ptr<std::istream> stream(agi::io::Open(userDicPath));
|
std::ifstream stream(agi::io::Open(userDicPath));
|
||||||
copy_if(
|
copy_if(
|
||||||
++agi::line_iterator<std::string>(*stream), agi::line_iterator<std::string>(),
|
++agi::line_iterator<std::string>(stream), agi::line_iterator<std::string>(),
|
||||||
inserter(customWords, customWords.end()),
|
inserter(customWords, customWords.end()),
|
||||||
[](std::string const& str) { return !str.empty(); });
|
[](std::string const& str) { return !str.empty(); });
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,8 +36,8 @@ TextFileReader::TextFileReader(agi::fs::path const& filename, std::string encodi
|
||||||
{
|
{
|
||||||
if (encoding.empty())
|
if (encoding.empty())
|
||||||
encoding = CharSetDetect::GetEncoding(filename);
|
encoding = CharSetDetect::GetEncoding(filename);
|
||||||
file.reset(agi::io::Open(filename, true));
|
file = agi::io::Open(filename, true);
|
||||||
iter = agi::line_iterator<std::string>(*file, encoding);
|
iter = agi::line_iterator<std::string>(file, encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
TextFileReader::~TextFileReader() {
|
TextFileReader::~TextFileReader() {
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <memory>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <libaegisub/fs_fwd.h>
|
#include <libaegisub/fs_fwd.h>
|
||||||
|
@ -31,7 +30,7 @@
|
||||||
/// @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::ifstream file;
|
||||||
bool trim;
|
bool trim;
|
||||||
agi::line_iterator<std::string> iter;
|
agi::line_iterator<std::string> iter;
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace {
|
||||||
json::Object const& get_root() {
|
json::Object const& get_root() {
|
||||||
static json::Object root;
|
static json::Object root;
|
||||||
if (root.empty())
|
if (root.empty())
|
||||||
root = agi::json_util::parse(new std::istringstream(GET_DEFAULT_CONFIG(default_toolbar)));
|
root = agi::json_util::parse(std::istringstream(GET_DEFAULT_CONFIG(default_toolbar)));
|
||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue