11 Memory::Memory(char *d, unsigned s)
16 Memory::Memory(char *b, char *e)
21 Memory::Memory(const char *cd, unsigned s)
23 char *d = const_cast<char *>(cd);
27 Memory::Memory(const char *b, const char *e)
29 init(const_cast<char *>(b), const_cast<char *>(e), M_READ);
32 void Memory::init(char *b, char *e, Mode m)
40 unsigned Memory::put(char c)
47 bool Memory::getline(string &line)
49 char *nl = find(pos, end, '\n');
51 bool result = (nl!=pos);
64 return static_cast<unsigned char>(*pos++);
67 unsigned Memory::seek(int off, SeekType type)
77 throw InvalidParameterValue("Invalid seek type");
79 if(new_pos<begin || new_pos>end)
80 throw InvalidParameterValue("Invalid seek offset");
86 Handle Memory::get_event_handle()
88 throw Exception("Memory doesn't support events");
91 unsigned Memory::do_write(const char *buf, unsigned size)
95 size = min<unsigned>(size, end-pos);
96 memcpy(pos, buf, size);
101 unsigned Memory::do_read(char *buf, unsigned size)
109 size = min<unsigned>(size, end-pos);
110 memcpy(buf, pos, size);
115 void Memory::check_mode(Mode m) const
120 throw InvalidState("Memory is not writable");
122 throw InvalidState("Attempt to write past end of Memory");