diff options
Diffstat (limited to 'FoundationEx/src/Reader_.cpp')
-rw-r--r-- | FoundationEx/src/Reader_.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/FoundationEx/src/Reader_.cpp b/FoundationEx/src/Reader_.cpp new file mode 100644 index 0000000..c3e33d5 --- /dev/null +++ b/FoundationEx/src/Reader_.cpp @@ -0,0 +1,89 @@ +/* Starshatter: The Open Source Project + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors + Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors + Copyright (c) 1997-2006, Destroyer Studios LLC. + + AUTHOR: John DiCamillo + + + OVERVIEW + ======== + Implementation of the Reader class +*/ + +#include <Reader.h> + +#include <cstdio> +#include <fstream> + +#include <Utils.h> + + +FileReader::FileReader(const char* fname) : + filename(fname), + done(0) +{ +} + + +Text +FileReader::more() +{ + if (done) return Text(); + + std::fstream fin(filename, std::fstream::in); + + if (!fin) { + Print("ERROR(Parse): Could not open file '%s'\n", filename.data()); + return Text(); + } + + Text result; + char buf[1000], newline; + + while (fin.get(buf, 1000)) { + result.append(buf); + fin.get(newline); + result.append(newline); + } + + done = 1; + return result; +} + + +BlockReader::BlockReader(const char* block) : + data((char*) block), + done(0), + length(0) +{ +} + + +BlockReader::BlockReader(const char* block, int len) : + data((char*) block), + done(0), + length(len) +{ +} + + +Text +BlockReader::more() +{ + if (done) return Text(); + + if (length) { + Text result(data, length); + done = 1; + return result; + } + else if (data) { + Text result(data); + done = 1; + return result; + } + + done = 1; + return Text(); +} |