X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fio%2Fmemory.cpp;h=274f6bae91c1a6a1d53f67be3872319bdae85bc2;hb=95bd04e16acacde19fcfdcc722baf72b06dcdfee;hp=4a6296b44a907321a5e04a585e229523ff7caf86;hpb=a56e05106571f28dc3044296849ccd5127d7d859;p=libs%2Fcore.git diff --git a/source/io/memory.cpp b/source/io/memory.cpp index 4a6296b..274f6ba 100644 --- a/source/io/memory.cpp +++ b/source/io/memory.cpp @@ -39,7 +39,7 @@ void Memory::init(char *b, char *e, Mode m) unsigned Memory::do_write(const char *buf, unsigned size) { - check_mode(M_WRITE); + check_access(M_WRITE); size = min(size, end-pos); memcpy(pos, buf, size); @@ -51,7 +51,7 @@ unsigned Memory::do_read(char *buf, unsigned size) { if(pos==end) { - eof_flag = true; + set_eof(); return 0; } @@ -63,25 +63,30 @@ unsigned Memory::do_read(char *buf, unsigned size) unsigned Memory::put(char c) { - check_mode(M_WRITE); + check_access(M_WRITE); *pos++ = c; return 1; } bool Memory::getline(string &line) { + if(pos==end) + { + set_eof(); + return false; + } + char *nl = find(pos, end, '\n'); line.assign(pos, nl); - bool result = (nl!=pos); - pos = nl; - return result; + pos = (nl==end ? end : nl+1); + return true; } int Memory::get() { if(pos==end) { - eof_flag = true; + set_eof(); return -1; } @@ -107,11 +112,5 @@ SeekOffset Memory::seek(SeekOffset off, SeekType type) return pos-begin; } -void Memory::check_mode(Mode m) const -{ - if(m==M_WRITE && !(mode&M_WRITE)) - throw invalid_access(M_WRITE); -} - } // namespace IO } // namespace Msp