summaryrefslogtreecommitdiff
path: root/src/core/common/CharReader.cpp
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-01 18:05:29 +0100
committerAndreas Stöckel <andreas@somweyr.de>2015-01-01 18:05:29 +0100
commit377b7b0213733307927bec9e39c8ccb063e6ba50 (patch)
tree69013cf4338d246b0a58caa6d2376c928690a255 /src/core/common/CharReader.cpp
parent1640daaa6d736f20012d4f10a5d3321394eef490 (diff)
Added readRaw function to CharReader
Diffstat (limited to 'src/core/common/CharReader.cpp')
-rw-r--r--src/core/common/CharReader.cpp14
1 files changed, 13 insertions, 1 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;