Commit 5ac2a699 authored by Max Kellermann's avatar Max Kellermann

input/TextInputStream: move ReadBufferedLine() to util/TextFile.hxx

parent 8278a12a
...@@ -21,31 +21,15 @@ ...@@ -21,31 +21,15 @@
#include "TextInputStream.hxx" #include "TextInputStream.hxx"
#include "InputStream.hxx" #include "InputStream.hxx"
#include "util/Error.hxx" #include "util/Error.hxx"
#include "util/TextFile.hxx"
#include "Log.hxx" #include "Log.hxx"
#include <assert.h> #include <assert.h>
#include <string.h>
char *
TextInputStream::ReadBufferedLine()
{
auto r = buffer.Read();
char *newline = reinterpret_cast<char*>(memchr(r.data, '\n', r.size));
if (newline == nullptr)
return nullptr;
buffer.Consume(newline + 1 - r.data);
if (newline > r.data && newline[-1] == '\r')
--newline;
*newline = 0;
return r.data;
}
char * char *
TextInputStream::ReadLine() TextInputStream::ReadLine()
{ {
char *line = ReadBufferedLine(); char *line = ReadBufferedLine(buffer);
if (line != nullptr) if (line != nullptr)
return line; return line;
...@@ -76,7 +60,7 @@ TextInputStream::ReadLine() ...@@ -76,7 +60,7 @@ TextInputStream::ReadLine()
return nullptr; return nullptr;
} }
line = ReadBufferedLine(); line = ReadBufferedLine(buffer);
if (line != nullptr) if (line != nullptr)
return line; return line;
......
...@@ -47,9 +47,6 @@ public: ...@@ -47,9 +47,6 @@ public:
* @return a pointer to the line, or nullptr on end-of-file or error * @return a pointer to the line, or nullptr on end-of-file or error
*/ */
char *ReadLine(); char *ReadLine();
private:
char *ReadBufferedLine();
}; };
#endif #endif
/*
* Copyright (C) 2008-2014 Max Kellermann <max@duempel.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef TEXT_FILE_HXX
#define TEXT_FILE_HXX
#include <string.h>
template<typename B>
char *
ReadBufferedLine(B &buffer)
{
auto r = buffer.Read();
char *newline = reinterpret_cast<char*>(memchr(r.data, '\n', r.size));
if (newline == nullptr)
return nullptr;
buffer.Consume(newline + 1 - r.data);
if (newline > r.data && newline[-1] == '\r')
--newline;
*newline = 0;
return r.data;
}
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment