X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fio%2Fmemory.cpp;h=0b2d8f4c1b7f49ec7ccb93222d2bf48915abf3fd;hb=991fabc1956b73a4007859058fb44171000b452e;hp=bc14ff1fd4e832967b93f346a7fd4de29c74f552;hpb=20b368c89a98f22243a0d496037ad0c43671eea7;p=libs%2Fcore.git diff --git a/source/io/memory.cpp b/source/io/memory.cpp index bc14ff1..0b2d8f4 100644 --- a/source/io/memory.cpp +++ b/source/io/memory.cpp @@ -8,46 +8,35 @@ using namespace std; namespace Msp { namespace IO { -Memory::Memory(char *d, unsigned s, Mode m) -{ - init(d, d+s, m); -} - Memory::Memory(char *b, char *e, Mode m) { - init(b, e, m); + begin = b; + end = e; + pos = begin; + mode = m; } -Memory::Memory(const char *cd, unsigned s) +void Memory::set_block(bool) { - char *d = const_cast(cd); - init(d, d+s, M_READ); + throw logic_error("Memory::set_block"); } -Memory::Memory(const char *b, const char *e) +void Memory::set_inherit(bool) { - init(const_cast(b), const_cast(e), M_READ); + throw logic_error("Memory::set_inherit"); } -void Memory::init(char *b, char *e, Mode m) -{ - begin = b; - end = e; - pos = begin; - mode = m; -} - -unsigned Memory::do_write(const char *buf, unsigned size) +size_t Memory::do_write(const char *buf, size_t size) { check_access(M_WRITE); - size = min(size, end-pos); + size = min(size, end-pos); memcpy(pos, buf, size); pos += size; return size; } -unsigned Memory::do_read(char *buf, unsigned size) +size_t Memory::do_read(char *buf, size_t size) { check_access(M_READ); @@ -57,15 +46,19 @@ unsigned Memory::do_read(char *buf, unsigned size) return 0; } - size = min(size, end-pos); + size = min(size, end-pos); memcpy(buf, pos, size); pos += size; return size; } -unsigned Memory::put(char c) +size_t Memory::put(char c) { check_access(M_WRITE); + + if(pos==end) + return 0; + *pos++ = c; return 1; } @@ -99,6 +92,11 @@ int Memory::get() return static_cast(*pos++); } +const Handle &Memory::get_handle(Mode) +{ + throw logic_error("Memory::get_handle"); +} + SeekOffset Memory::seek(SeekOffset off, SeekType type) { char *new_pos; @@ -112,9 +110,10 @@ SeekOffset Memory::seek(SeekOffset off, SeekType type) throw invalid_argument("Memory::seek"); if(new_posend) - throw out_of_range("Memory::seek"); + throw bad_seek(off, type); pos = new_pos; + eof_flag = false; return pos-begin; }