diff options
-rw-r--r-- | CMakeLists.txt | 30 | ||||
-rw-r--r-- | CreateArtistTileBehavior.cpp (renamed from YellowTileBehavior.cpp) | 0 | ||||
-rw-r--r-- | CreateArtistTileBehavior.h (renamed from YellowTileBehavior.h) | 0 | ||||
-rw-r--r-- | DeleteArtistTileBehavior.cpp (renamed from RedTileBehavior.cpp) | 0 | ||||
-rw-r--r-- | DeleteArtistTileBehavior.h (renamed from RedTileBehavior.h) | 0 | ||||
-rw-r--r-- | FileReader.cpp | 35 | ||||
-rw-r--r-- | FileReader.h | 32 | ||||
-rw-r--r-- | FileReaderFactory.cpp | 36 | ||||
-rw-r--r-- | FileReaderFactory.h | 27 | ||||
-rw-r--r-- | FileStrategy.cpp | 9 | ||||
-rw-r--r-- | FileStrategy.h | 25 | ||||
-rw-r--r-- | HTTPFileReader.cpp (renamed from HTTPFile.cpp) | 0 | ||||
-rw-r--r-- | HTTPFileReader.h (renamed from HTTPFile.h) | 0 | ||||
-rw-r--r-- | LocalFileReader.cpp (renamed from LocalFile.cpp) | 0 | ||||
-rw-r--r-- | LocalFileReader.h (renamed from LocalFile.h) | 0 | ||||
-rw-r--r-- | MuseumDeserializer.cpp (renamed from Deserializer.cpp) | 0 | ||||
-rw-r--r-- | MuseumDeserializer.h (renamed from Deserializer.h) | 0 | ||||
-rw-r--r-- | Parser.h | 15 | ||||
-rw-r--r-- | ParserFactory.cpp (renamed from Parser.cpp) | 0 | ||||
-rw-r--r-- | ParserFactory.h | 20 | ||||
-rw-r--r-- | ParserStrategy.h | 11 | ||||
-rw-r--r-- | SetNeighborTileBehavior.cpp (renamed from BlueTileBehavior.cpp) | 0 | ||||
-rw-r--r-- | SetNeighborTileBehavior.h (renamed from BlueTileBehavior.h) | 0 | ||||
-rw-r--r-- | StepTileBehavior.cpp (renamed from GrayTileBehavior.cpp) | 0 | ||||
-rw-r--r-- | StepTileBehavior.h (renamed from GrayTileBehavior.h) | 0 | ||||
-rw-r--r-- | StepTileCommand.cpp (renamed from TileDecayCommand.cpp) | 0 | ||||
-rw-r--r-- | StepTileCommand.h (renamed from TileDecayCommand.h) | 0 | ||||
-rw-r--r-- | TileBehavior.cpp | 19 | ||||
-rw-r--r-- | TileBehavior.h | 27 | ||||
-rw-r--r-- | TileBehaviorFactory.cpp | 20 | ||||
-rw-r--r-- | TileBehaviorFactory.h | 21 | ||||
-rw-r--r-- | TileBehaviorStrategy.cpp | 11 | ||||
-rw-r--r-- | TileBehaviorStrategy.h | 24 | ||||
-rw-r--r-- | TileColorFactory.cpp (renamed from TileAppearance.cpp) | 0 | ||||
-rw-r--r-- | TileColorFactory.h (renamed from TileAppearance.h) | 0 | ||||
-rw-r--r-- | ToggleArtistVisibilityCommand.cpp (renamed from ArtistVisibilityCommand.cpp) | 0 | ||||
-rw-r--r-- | ToggleArtistVisibilityCommand.h (renamed from ArtistVisibilityCommand.h) | 0 | ||||
-rw-r--r-- | ToggleMuseumPauseCommand.cpp (renamed from MuseumPauseCommand.cpp) | 0 | ||||
-rw-r--r-- | ToggleMuseumPauseCommand.h (renamed from MuseumPauseCommand.h) | 0 |
39 files changed, 181 insertions, 181 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index a74a6b3..c946384 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,26 +17,26 @@ project(main C CXX) add_executable(main main.cpp util.cpp - FileStrategy.cpp - HTTPFile.cpp - LocalFile.cpp - Exception.cpp FileReader.cpp + HTTPFileReader.cpp + LocalFileReader.cpp + Exception.cpp + FileReaderFactory.cpp Canvas.cpp - Parser.cpp + ParserFactory.cpp CSVParser.cpp XMLParser.cpp # TXTParser.cpp - Deserializer.cpp + MuseumDeserializer.cpp Tile.cpp - TileAppearance.cpp - TileBehaviorStrategy.cpp + TileColorFactory.cpp TileBehavior.cpp + TileBehaviorFactory.cpp NullTileBehavior.cpp - YellowTileBehavior.cpp - BlueTileBehavior.cpp - RedTileBehavior.cpp - GrayTileBehavior.cpp + CreateArtistTileBehavior.cpp + SetNeighborTileBehavior.cpp + DeleteArtistTileBehavior.cpp + StepTileBehavior.cpp ViewController.cpp View.cpp Museum.cpp @@ -45,9 +45,9 @@ add_executable(main Command.cpp OpenFileGUICommand.cpp LoadFilesCommand.cpp - MuseumPauseCommand.cpp - ArtistVisibilityCommand.cpp - TileDecayCommand.cpp + ToggleMuseumPauseCommand.cpp + ToggleArtistVisibilityCommand.cpp + StepTileCommand.cpp TimeTravelCommand.cpp ) diff --git a/YellowTileBehavior.cpp b/CreateArtistTileBehavior.cpp index ae0cd7c..ae0cd7c 100644 --- a/YellowTileBehavior.cpp +++ b/CreateArtistTileBehavior.cpp diff --git a/YellowTileBehavior.h b/CreateArtistTileBehavior.h index 6abd67f..6abd67f 100644 --- a/YellowTileBehavior.h +++ b/CreateArtistTileBehavior.h diff --git a/RedTileBehavior.cpp b/DeleteArtistTileBehavior.cpp index 091a251..091a251 100644 --- a/RedTileBehavior.cpp +++ b/DeleteArtistTileBehavior.cpp diff --git a/RedTileBehavior.h b/DeleteArtistTileBehavior.h index 0b2b0d4..0b2b0d4 100644 --- a/RedTileBehavior.h +++ b/DeleteArtistTileBehavior.h diff --git a/FileReader.cpp b/FileReader.cpp index 4b72b11..b76de50 100644 --- a/FileReader.cpp +++ b/FileReader.cpp @@ -1,36 +1,9 @@ -#include <memory> +#include <string> -#include "FileReaderFactory.h" #include "FileReader.h" +#include "FileReaderFactory.h" -using namespace std; - -unique_ptr<FileReader> FileReaderFactory::open(const std::string url) { - FileReader * reader = find_reader(url)->clone(); - reader->open(url); - return unique_ptr<FileReader>(reader); -} - -void FileReaderFactory::register_strategy(const std::string type, const FileReader * node) { - static FactoryMap & map = get_map(); - map[type] = node; -} - -FactoryMap & FileReaderFactory::get_map() { - static FactoryMap map; - return map; -} - -const FileReader * FileReaderFactory::find_reader(const std::string type) { - static FactoryMap & map = get_map(); - - // try to find protocol by prefix - for (auto item : map) { - if (!type.starts_with(item.first)) continue; - return item.second; - } - - // fallback is local file - return map.find("file://")->second; +FileReader::FileReader(const std::string protocol) { + FileReaderFactory::register_strategy(protocol, this); } diff --git a/FileReader.h b/FileReader.h index 0829985..f896ec8 100644 --- a/FileReader.h +++ b/FileReader.h @@ -1,27 +1,25 @@ #pragma once -#include <string> -#include <map> -#include <memory> - -#include "FileReader.h" +class FileReaderFactory; -using FactoryMap = std::map<std::string, const FileReader *>; +#include <string> -class FileReaderFactory { +class FileReader { +protected: + virtual void open(const std::string url) = 0; public: - static std::unique_ptr<FileReader> open(const std::string url); + virtual void close() = 0; + virtual const std::string read() = 0; -private: - FileReaderFactory() = default; - virtual ~FileReaderFactory() = default; +public: + virtual ~FileReader() = default; -private: - static void register_strategy(const std::string type, const FileReader * node); - static FactoryMap & get_map(); - static const FileReader * find_reader(const std::string type); +protected: + FileReader() = default; + virtual FileReader * clone() const = 0; -private: - friend FileReader; +protected: + FileReader(const std::string protocol); + friend FileReaderFactory; }; diff --git a/FileReaderFactory.cpp b/FileReaderFactory.cpp new file mode 100644 index 0000000..4b72b11 --- /dev/null +++ b/FileReaderFactory.cpp @@ -0,0 +1,36 @@ +#include <memory> + +#include "FileReaderFactory.h" +#include "FileReader.h" + +using namespace std; + +unique_ptr<FileReader> FileReaderFactory::open(const std::string url) { + FileReader * reader = find_reader(url)->clone(); + reader->open(url); + return unique_ptr<FileReader>(reader); +} + +void FileReaderFactory::register_strategy(const std::string type, const FileReader * node) { + static FactoryMap & map = get_map(); + map[type] = node; +} + +FactoryMap & FileReaderFactory::get_map() { + static FactoryMap map; + return map; +} + +const FileReader * FileReaderFactory::find_reader(const std::string type) { + static FactoryMap & map = get_map(); + + // try to find protocol by prefix + for (auto item : map) { + if (!type.starts_with(item.first)) continue; + return item.second; + } + + // fallback is local file + return map.find("file://")->second; +} + diff --git a/FileReaderFactory.h b/FileReaderFactory.h new file mode 100644 index 0000000..0829985 --- /dev/null +++ b/FileReaderFactory.h @@ -0,0 +1,27 @@ +#pragma once + +#include <string> +#include <map> +#include <memory> + +#include "FileReader.h" + +using FactoryMap = std::map<std::string, const FileReader *>; + +class FileReaderFactory { +public: + static std::unique_ptr<FileReader> open(const std::string url); + +private: + FileReaderFactory() = default; + virtual ~FileReaderFactory() = default; + +private: + static void register_strategy(const std::string type, const FileReader * node); + static FactoryMap & get_map(); + static const FileReader * find_reader(const std::string type); + +private: + friend FileReader; +}; + diff --git a/FileStrategy.cpp b/FileStrategy.cpp deleted file mode 100644 index b76de50..0000000 --- a/FileStrategy.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include <string> - -#include "FileReader.h" -#include "FileReaderFactory.h" - -FileReader::FileReader(const std::string protocol) { - FileReaderFactory::register_strategy(protocol, this); -} - diff --git a/FileStrategy.h b/FileStrategy.h deleted file mode 100644 index f896ec8..0000000 --- a/FileStrategy.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -class FileReaderFactory; - -#include <string> - -class FileReader { -protected: - virtual void open(const std::string url) = 0; -public: - virtual void close() = 0; - virtual const std::string read() = 0; - -public: - virtual ~FileReader() = default; - -protected: - FileReader() = default; - virtual FileReader * clone() const = 0; - -protected: - FileReader(const std::string protocol); - friend FileReaderFactory; -}; - diff --git a/HTTPFile.cpp b/HTTPFileReader.cpp index d7f5dd4..d7f5dd4 100644 --- a/HTTPFile.cpp +++ b/HTTPFileReader.cpp diff --git a/HTTPFile.h b/HTTPFileReader.h index 4b05e18..4b05e18 100644 --- a/HTTPFile.h +++ b/HTTPFileReader.h diff --git a/LocalFile.cpp b/LocalFileReader.cpp index 1f9d574..1f9d574 100644 --- a/LocalFile.cpp +++ b/LocalFileReader.cpp diff --git a/LocalFile.h b/LocalFileReader.h index 6ea4f84..6ea4f84 100644 --- a/LocalFile.h +++ b/LocalFileReader.h diff --git a/Deserializer.cpp b/MuseumDeserializer.cpp index fca8d50..fca8d50 100644 --- a/Deserializer.cpp +++ b/MuseumDeserializer.cpp diff --git a/Deserializer.h b/MuseumDeserializer.h index 7fecf56..7fecf56 100644 --- a/Deserializer.h +++ b/MuseumDeserializer.h @@ -2,19 +2,10 @@ #include "FileReader.h" #include "MuseumDeserializer.h" -#include "Parser.h" - -class ParserFactory { - typedef std::vector<Parser*> ParserCollection; +class Parser { public: - static void parse(FileReader & f, MuseumDeserializer & d); - static void register_strategy(Parser * p); - -private: - static ParserCollection & get_collection() { - static ParserCollection c = {}; - return c; - } + virtual void parse(FileReader & f, MuseumDeserializer & d) = 0; + virtual unsigned int heuristic(FileReader & f) = 0; }; diff --git a/Parser.cpp b/ParserFactory.cpp index 49c4d00..49c4d00 100644 --- a/Parser.cpp +++ b/ParserFactory.cpp diff --git a/ParserFactory.h b/ParserFactory.h new file mode 100644 index 0000000..5430366 --- /dev/null +++ b/ParserFactory.h @@ -0,0 +1,20 @@ +#pragma once + +#include "FileReader.h" +#include "MuseumDeserializer.h" +#include "Parser.h" + +class ParserFactory { + typedef std::vector<Parser*> ParserCollection; + +public: + static void parse(FileReader & f, MuseumDeserializer & d); + static void register_strategy(Parser * p); + +private: + static ParserCollection & get_collection() { + static ParserCollection c = {}; + return c; + } +}; + diff --git a/ParserStrategy.h b/ParserStrategy.h deleted file mode 100644 index 01efb3c..0000000 --- a/ParserStrategy.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "FileReader.h" -#include "MuseumDeserializer.h" - -class Parser { -public: - virtual void parse(FileReader & f, MuseumDeserializer & d) = 0; - virtual unsigned int heuristic(FileReader & f) = 0; -}; - diff --git a/BlueTileBehavior.cpp b/SetNeighborTileBehavior.cpp index d934d4b..d934d4b 100644 --- a/BlueTileBehavior.cpp +++ b/SetNeighborTileBehavior.cpp diff --git a/BlueTileBehavior.h b/SetNeighborTileBehavior.h index d316420..d316420 100644 --- a/BlueTileBehavior.h +++ b/SetNeighborTileBehavior.h diff --git a/GrayTileBehavior.cpp b/StepTileBehavior.cpp index 2023bb8..2023bb8 100644 --- a/GrayTileBehavior.cpp +++ b/StepTileBehavior.cpp diff --git a/GrayTileBehavior.h b/StepTileBehavior.h index d044fe7..d044fe7 100644 --- a/GrayTileBehavior.h +++ b/StepTileBehavior.h diff --git a/TileDecayCommand.cpp b/StepTileCommand.cpp index ff5c6b2..ff5c6b2 100644 --- a/TileDecayCommand.cpp +++ b/StepTileCommand.cpp diff --git a/TileDecayCommand.h b/StepTileCommand.h index ce9dccd..ce9dccd 100644 --- a/TileDecayCommand.h +++ b/StepTileCommand.h diff --git a/TileBehavior.cpp b/TileBehavior.cpp index 99301ac..9de896e 100644 --- a/TileBehavior.cpp +++ b/TileBehavior.cpp @@ -1,20 +1,11 @@ #include "TileBehaviorFactory.h" -#include "Exception.h" +#include "TileBehavior.h" -using namespace std; - -TileBehavior & TileBehaviorFactory::get_strategy(string type) { - auto & type_map = TileBehaviorFactory::get_collection(); - - if (type_map.contains(type)) - return *type_map.at(type); - - throw Exception("unknown behavior for tile type \"%s\"", type.c_str()); +TileBehavior::TileBehavior(const std::string type) { + TileBehaviorFactory::register_strategy(type, this); } -void TileBehaviorFactory::register_strategy(string type, TileBehavior * strategy) { - auto & type_map = TileBehaviorFactory::get_collection(); - - type_map[type] = strategy; +void TileBehavior::step(Artist *) { + this->interactions++; } diff --git a/TileBehavior.h b/TileBehavior.h index 33cd795..b79e7f5 100644 --- a/TileBehavior.h +++ b/TileBehavior.h @@ -1,21 +1,24 @@ #pragma once -#include <map> #include <string> +#include <memory> -#include "TileBehavior.h" - -class TileBehaviorFactory { - typedef std::map<std::string, TileBehavior *> TileBehaviorCollection; +class Tile; +class Museum; +class Artist; +class TileBehavior { public: - static TileBehavior & get_strategy(std::string); - static void register_strategy(std::string, TileBehavior *); + virtual void step(Artist *); + virtual void update(Tile &) = 0; + virtual std::unique_ptr<TileBehavior> clone(Museum & m) = 0; + +protected: + TileBehavior(const std::string type); + TileBehavior() = default; -private: - static TileBehaviorCollection & get_collection() { - static TileBehaviorCollection c = {}; - return c; - } +protected: + unsigned int interactions = 0; + Museum * museum = nullptr; }; diff --git a/TileBehaviorFactory.cpp b/TileBehaviorFactory.cpp new file mode 100644 index 0000000..99301ac --- /dev/null +++ b/TileBehaviorFactory.cpp @@ -0,0 +1,20 @@ +#include "TileBehaviorFactory.h" +#include "Exception.h" + +using namespace std; + +TileBehavior & TileBehaviorFactory::get_strategy(string type) { + auto & type_map = TileBehaviorFactory::get_collection(); + + if (type_map.contains(type)) + return *type_map.at(type); + + throw Exception("unknown behavior for tile type \"%s\"", type.c_str()); +} + +void TileBehaviorFactory::register_strategy(string type, TileBehavior * strategy) { + auto & type_map = TileBehaviorFactory::get_collection(); + + type_map[type] = strategy; +} + diff --git a/TileBehaviorFactory.h b/TileBehaviorFactory.h new file mode 100644 index 0000000..33cd795 --- /dev/null +++ b/TileBehaviorFactory.h @@ -0,0 +1,21 @@ +#pragma once + +#include <map> +#include <string> + +#include "TileBehavior.h" + +class TileBehaviorFactory { + typedef std::map<std::string, TileBehavior *> TileBehaviorCollection; + +public: + static TileBehavior & get_strategy(std::string); + static void register_strategy(std::string, TileBehavior *); + +private: + static TileBehaviorCollection & get_collection() { + static TileBehaviorCollection c = {}; + return c; + } +}; + diff --git a/TileBehaviorStrategy.cpp b/TileBehaviorStrategy.cpp deleted file mode 100644 index 9de896e..0000000 --- a/TileBehaviorStrategy.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "TileBehaviorFactory.h" -#include "TileBehavior.h" - -TileBehavior::TileBehavior(const std::string type) { - TileBehaviorFactory::register_strategy(type, this); -} - -void TileBehavior::step(Artist *) { - this->interactions++; -} - diff --git a/TileBehaviorStrategy.h b/TileBehaviorStrategy.h deleted file mode 100644 index b79e7f5..0000000 --- a/TileBehaviorStrategy.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include <string> -#include <memory> - -class Tile; -class Museum; -class Artist; - -class TileBehavior { -public: - virtual void step(Artist *); - virtual void update(Tile &) = 0; - virtual std::unique_ptr<TileBehavior> clone(Museum & m) = 0; - -protected: - TileBehavior(const std::string type); - TileBehavior() = default; - -protected: - unsigned int interactions = 0; - Museum * museum = nullptr; -}; - diff --git a/TileAppearance.cpp b/TileColorFactory.cpp index 7c5b080..7c5b080 100644 --- a/TileAppearance.cpp +++ b/TileColorFactory.cpp diff --git a/TileAppearance.h b/TileColorFactory.h index 83dfeed..83dfeed 100644 --- a/TileAppearance.h +++ b/TileColorFactory.h diff --git a/ArtistVisibilityCommand.cpp b/ToggleArtistVisibilityCommand.cpp index 6c22dbc..6c22dbc 100644 --- a/ArtistVisibilityCommand.cpp +++ b/ToggleArtistVisibilityCommand.cpp diff --git a/ArtistVisibilityCommand.h b/ToggleArtistVisibilityCommand.h index 47e2158..47e2158 100644 --- a/ArtistVisibilityCommand.h +++ b/ToggleArtistVisibilityCommand.h diff --git a/MuseumPauseCommand.cpp b/ToggleMuseumPauseCommand.cpp index 57176af..57176af 100644 --- a/MuseumPauseCommand.cpp +++ b/ToggleMuseumPauseCommand.cpp diff --git a/MuseumPauseCommand.h b/ToggleMuseumPauseCommand.h index 15d1388..15d1388 100644 --- a/MuseumPauseCommand.h +++ b/ToggleMuseumPauseCommand.h |