summaryrefslogtreecommitdiffhomepage
path: root/FoundationEx/src/Reader_.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'FoundationEx/src/Reader_.cpp')
-rw-r--r--FoundationEx/src/Reader_.cpp89
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();
+}