summaryrefslogtreecommitdiff
path: root/MorgSimulator/Reader
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-10-30 17:01:14 -0700
committerFuwn <[email protected]>2025-10-30 17:01:14 -0700
commit5cdde428a7f966f17f0a94eca7b94fbf1e499838 (patch)
tree5f94122032752e2561009ef1c5e5b6641c5fb73c /MorgSimulator/Reader
parentrefactor(diagrams): Move present diagrams to assignment folder (diff)
downloadcst276-5cdde428a7f966f17f0a94eca7b94fbf1e499838.tar.xz
cst276-5cdde428a7f966f17f0a94eca7b94fbf1e499838.zip
feat: Implement Assignment 2 functionality
Diffstat (limited to 'MorgSimulator/Reader')
-rw-r--r--MorgSimulator/Reader/CSVReader.cs25
-rw-r--r--MorgSimulator/Reader/FileReader.cs23
-rw-r--r--MorgSimulator/Reader/MorgReader.cs32
-rw-r--r--MorgSimulator/Reader/Reader.cs11
-rw-r--r--MorgSimulator/Reader/ReaderDecorator.cs21
5 files changed, 112 insertions, 0 deletions
diff --git a/MorgSimulator/Reader/CSVReader.cs b/MorgSimulator/Reader/CSVReader.cs
new file mode 100644
index 0000000..b678eed
--- /dev/null
+++ b/MorgSimulator/Reader/CSVReader.cs
@@ -0,0 +1,25 @@
+#nullable enable
+namespace MorgSimulator.Reader
+{
+ public class CSVReader(Reader reader) : ReaderDecorator(reader)
+ {
+ public override string? ReadLine()
+ {
+ var line = base.ReadLine();
+
+ if (line == null) return null;
+
+ return line.Trim();
+ }
+
+ public string[]? ReadCSVLine()
+ {
+ var line = ReadLine();
+
+ if (line == null) return null;
+
+ return line.Split(',');
+ }
+ }
+}
+#nullable disable
diff --git a/MorgSimulator/Reader/FileReader.cs b/MorgSimulator/Reader/FileReader.cs
new file mode 100644
index 0000000..8c7e3eb
--- /dev/null
+++ b/MorgSimulator/Reader/FileReader.cs
@@ -0,0 +1,23 @@
+#nullable enable
+using System.IO;
+
+namespace MorgSimulator.Reader
+{
+ public class FileReader(string filePath) : Reader
+ {
+ private readonly StreamReader _streamReader = new(filePath);
+
+ public override string? ReadLine()
+ {
+ return _streamReader.ReadLine();
+ }
+
+ public override bool EndOfStream => _streamReader.EndOfStream;
+
+ public override void Close()
+ {
+ _streamReader.Close();
+ }
+ }
+}
+#nullable disable
diff --git a/MorgSimulator/Reader/MorgReader.cs b/MorgSimulator/Reader/MorgReader.cs
new file mode 100644
index 0000000..2bf9a30
--- /dev/null
+++ b/MorgSimulator/Reader/MorgReader.cs
@@ -0,0 +1,32 @@
+#nullable enable
+using MorgSimulator.Factory;
+
+namespace MorgSimulator.Reader
+{
+ public class MorgReader(Reader reader, IMorgFactory factory) : ReaderDecorator(reader)
+ {
+ private readonly IMorgFactory _factory = factory;
+
+ public Morg? ReadMorg(int id)
+ {
+ if (_reader is not CSVReader csvReader) return null;
+
+ var fields = csvReader.ReadCSVLine();
+
+ if (fields == null || fields.Length < 5) return null;
+
+ var type = fields[0].Trim();
+ var xString = fields[1].Trim();
+ var yString = fields[2].Trim();
+ var movement = fields[3].Trim();
+ var feeding = fields[4].Trim();
+
+ if (!int.TryParse(xString, out int x) ||
+ !int.TryParse(yString, out int y))
+ return null;
+
+ return _factory.CreateMorg(id, type, x, y, movement, feeding);
+ }
+ }
+}
+#nullable disable
diff --git a/MorgSimulator/Reader/Reader.cs b/MorgSimulator/Reader/Reader.cs
new file mode 100644
index 0000000..13563b0
--- /dev/null
+++ b/MorgSimulator/Reader/Reader.cs
@@ -0,0 +1,11 @@
+#nullable enable
+namespace MorgSimulator.Reader
+{
+ public abstract class Reader
+ {
+ public abstract string? ReadLine();
+ public abstract bool EndOfStream { get; }
+ public abstract void Close();
+ }
+}
+#nullable disable
diff --git a/MorgSimulator/Reader/ReaderDecorator.cs b/MorgSimulator/Reader/ReaderDecorator.cs
new file mode 100644
index 0000000..38dc1e6
--- /dev/null
+++ b/MorgSimulator/Reader/ReaderDecorator.cs
@@ -0,0 +1,21 @@
+#nullable enable
+namespace MorgSimulator.Reader
+{
+ public abstract class ReaderDecorator(Reader reader) : Reader
+ {
+ protected Reader _reader = reader;
+
+ public override string? ReadLine()
+ {
+ return _reader.ReadLine();
+ }
+
+ public override bool EndOfStream => _reader.EndOfStream;
+
+ public override void Close()
+ {
+ _reader.Close();
+ }
+ }
+}
+#nullable disable