std::string GetLineWithSize(std::size_t const size, std::ifstream& stream) { std::unique_ptr<char[]> buffer(new char[size]); if (!stream.getline(&buffer[0], size).eof() && stream.fail()) { stream.clear(); std::string string_buffer(buffer.get()); string_buffer += GetLineWithSize(2 * size, stream); return std::move(string_buffer); } else { std::string string_buffer(buffer.get()); return std::move(string_buffer); } }
std::string GetLine(std::ifstream& stream) { return GetLineWithSize(buffer_size, stream); }
std::string GetLine(not_null<std::ifstream*> const stream) { return GetLineWithSize(kBufferSize, stream); }