diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-01 18:05:29 +0100 |
---|---|---|
committer | Andreas Stöckel <andreas@somweyr.de> | 2015-01-01 18:05:29 +0100 |
commit | 377b7b0213733307927bec9e39c8ccb063e6ba50 (patch) | |
tree | 69013cf4338d246b0a58caa6d2376c928690a255 | |
parent | 1640daaa6d736f20012d4f10a5d3321394eef490 (diff) |
Added readRaw function to CharReader
-rw-r--r-- | src/core/common/CharReader.cpp | 14 | ||||
-rw-r--r-- | src/core/common/CharReader.hpp | 15 |
2 files changed, 25 insertions, 4 deletions
diff --git a/src/core/common/CharReader.cpp b/src/core/common/CharReader.cpp index db9bb2e..6966b97 100644 --- a/src/core/common/CharReader.cpp +++ b/src/core/common/CharReader.cpp @@ -516,6 +516,18 @@ CharReaderFork CharReader::fork() return CharReaderFork(buffer, readCursor, peekCursor, coherent); } +size_t CharReader::readRaw(char *buf, size_t size) +{ + // TODO: This is inefficient, implement ranged read in the Buffer class and + // use it + size_t res = 0; + while (res < size && read(*buf)) { + buf++; + res++; + } + return res; +} + SourceContext CharReader::getContextAt(ssize_t maxSize, Buffer::CursorId referenceCursor) { @@ -622,7 +634,7 @@ SourceContext CharReader::getContextAtOffs(ssize_t maxSize, size_t offs) // Create a new cursor and calculate how far it has to be moved to reach // the position specified in the location instance Buffer::CursorId cur = buffer->createCursor(); - ssize_t moveOffs = buffer->offset(cur) - offs; + ssize_t moveOffs = offs - buffer->offset(cur); // Try to move the cursor to the specified position and read the context SourceContext res; diff --git a/src/core/common/CharReader.hpp b/src/core/common/CharReader.hpp index fd3186c..134d9d9 100644 --- a/src/core/common/CharReader.hpp +++ b/src/core/common/CharReader.hpp @@ -38,9 +38,8 @@ namespace ousia { /** * A chunked ring buffer used in CharReader to provide access to an input stream - * with multiple read cursors. The Buffer automatically expands to the - * size of the spanned by the read cursors while reusing already allocated - * memory. + * with multiple read cursors. The Buffer automatically expands to the size of + * the spanned by the read cursors while reusing already allocated memory. */ class Buffer { public: @@ -563,6 +562,16 @@ public: CharReaderFork fork(); /** + * Reads raw data from the CharReader without any processing. Data is always + * read from the read cursor. + * + * @param buf is the target memory buffer. + * @param size is the number of bytes to be read. + * @return the number of bytes read. + */ + size_t readRaw(char *buf, size_t size); + + /** * Returns true if there are no more characters as the stream was * closed. * |