base: Rewrite the CircleBuf to fix bugs and add serialization
The CircleBuf class has at least one bug causing it to overwrite the wrong elements when wrapping. The current code has a lot of unused functionality and duplicated code. This changeset replaces the old implementation with a new version that supports serialization and arbitrary types in the buffer (not just char).
This commit is contained in:
@@ -205,8 +205,12 @@ Terminal::accept()
|
||||
write((const uint8_t *)stream.str().c_str(), stream.str().size());
|
||||
|
||||
DPRINTFN("attach terminal %d\n", number);
|
||||
|
||||
txbuf.readall(data_fd);
|
||||
char buf[1024];
|
||||
for (size_t i = 0; i < txbuf.size(); i += sizeof(buf)) {
|
||||
const size_t chunk_len(std::min(txbuf.size() - i, sizeof(buf)));
|
||||
txbuf.peek(buf, chunk_len);
|
||||
write((const uint8_t *)buf, chunk_len);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -329,7 +333,7 @@ Terminal::out(char c)
|
||||
DPRINTF(Terminal, "%s\n", buffer);
|
||||
delete [] buffer;
|
||||
} else {
|
||||
linebuf.write(c);
|
||||
linebuf.write(&c, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,7 +341,7 @@ Terminal::out(char c)
|
||||
}
|
||||
#endif
|
||||
|
||||
txbuf.write(c);
|
||||
txbuf.write(&c, 1);
|
||||
|
||||
if (data_fd >= 0)
|
||||
write(c);
|
||||
|
||||
@@ -109,11 +109,11 @@ class Terminal : public SimObject
|
||||
void accept();
|
||||
|
||||
protected:
|
||||
CircleBuf txbuf;
|
||||
CircleBuf rxbuf;
|
||||
CircleBuf<char> txbuf;
|
||||
CircleBuf<char> rxbuf;
|
||||
std::ostream *outfile;
|
||||
#if TRACING_ON == 1
|
||||
CircleBuf linebuf;
|
||||
CircleBuf<char> linebuf;
|
||||
#endif
|
||||
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user