diff options
| author | Fuwn <[email protected]> | 2025-10-30 17:01:14 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-10-30 17:01:14 -0700 |
| commit | 5cdde428a7f966f17f0a94eca7b94fbf1e499838 (patch) | |
| tree | 5f94122032752e2561009ef1c5e5b6641c5fb73c /MorgSimulator/Reader | |
| parent | refactor(diagrams): Move present diagrams to assignment folder (diff) | |
| download | cst276-5cdde428a7f966f17f0a94eca7b94fbf1e499838.tar.xz cst276-5cdde428a7f966f17f0a94eca7b94fbf1e499838.zip | |
feat: Implement Assignment 2 functionality
Diffstat (limited to 'MorgSimulator/Reader')
| -rw-r--r-- | MorgSimulator/Reader/CSVReader.cs | 25 | ||||
| -rw-r--r-- | MorgSimulator/Reader/FileReader.cs | 23 | ||||
| -rw-r--r-- | MorgSimulator/Reader/MorgReader.cs | 32 | ||||
| -rw-r--r-- | MorgSimulator/Reader/Reader.cs | 11 | ||||
| -rw-r--r-- | MorgSimulator/Reader/ReaderDecorator.cs | 21 |
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 |