From a0c5d31b12f9c368309314679e58e5a7421c36c8 Mon Sep 17 00:00:00 2001 From: Danilo Date: Mon, 3 Jun 2024 21:15:20 -0300 Subject: [PATCH] Remove XnaErrorCode em ContentTypeReaderManager --- framework/content/typereadermanager.cpp | 33 ++++++++-------------- inc/content/typereadermanager.hpp | 18 ++++++------ samples/02_PlatfformerStarterKit/level.cpp | 6 ++-- 3 files changed, 25 insertions(+), 32 deletions(-) diff --git a/framework/content/typereadermanager.cpp b/framework/content/typereadermanager.cpp index d64fd03..433e700 100644 --- a/framework/content/typereadermanager.cpp +++ b/framework/content/typereadermanager.cpp @@ -33,7 +33,7 @@ namespace xna { activators.insert({ hash, activador }); } - std::vector ContentTypeReaderManager::ReadTypeManifest(Int typeCount, sptr& contentReader, xna_error_ptr_arg) + std::vector ContentTypeReaderManager::ReadTypeManifest(Int typeCount, sptr& contentReader) { initMaps(); @@ -48,8 +48,7 @@ namespace xna { auto typeReader = ContentTypeReaderManager::GetTypeReader(xnaType.empty() ? readerTypeName : xnaType, contentReader, newTypeReaders); - if (contentReader->ReadInt32() != typeReader->TypeVersion()) { - xna_error_apply(err, XnaErrorCode::BAD_TYPE); + if (contentReader->ReadInt32() != typeReader->TypeVersion()) { ContentTypeReaderManager::RollbackAddReaders(newTypeReaders); return std::vector(); } @@ -69,11 +68,10 @@ namespace xna { return contentTypeReaderArray; } - sptr ContentTypeReaderManager::GetTypeReader(sptr const& targetType, sptr& contentReader, xna_error_ptr_arg) + sptr ContentTypeReaderManager::GetTypeReader(sptr const& targetType) { if (!targetType) { - xna_error_apply(err, XnaErrorCode::ARGUMENT_IS_NULL); - return nullptr; + throw std::invalid_argument("ContentTypeReaderManager::GetTypeReader: targetType is null."); } for (auto const& item : ContentTypeReaderManager::targetTypeToReader) { @@ -91,30 +89,25 @@ namespace xna { initMaps(); } - sptr ContentTypeReaderManager::GetTypeReader(String const& readerTypeName, sptr& contentReader, std::vector& newTypeReaders, xna_error_ptr_arg) + sptr ContentTypeReaderManager::GetTypeReader(String const& readerTypeName, sptr& contentReader, std::vector& newTypeReaders) { sptr reader = nullptr; if (ContentTypeReaderManager::nameToReader.contains(readerTypeName)) { return ContentTypeReaderManager::nameToReader[readerTypeName]; } - else if (!ContentTypeReaderManager::InstantiateTypeReader(readerTypeName, contentReader, reader, err)) { + else if (!ContentTypeReaderManager::InstantiateTypeReader(readerTypeName, contentReader, reader)) { return reader; - } + } - if (xna_error_haserros(err)) - return nullptr; - - ContentTypeReaderManager::AddTypeReader(readerTypeName, contentReader, reader, err); - - if (xna_error_haserros(err)) return nullptr; + ContentTypeReaderManager::AddTypeReader(readerTypeName, contentReader, reader); newTypeReaders.push_back(reader); return reader; } - bool ContentTypeReaderManager::InstantiateTypeReader(String const& readerTypeName, sptr& contentReader, sptr& reader, xna_error_ptr_arg) + bool ContentTypeReaderManager::InstantiateTypeReader(String const& readerTypeName, sptr& contentReader, sptr& reader) { sptr type = nullptr; @@ -122,8 +115,7 @@ namespace xna { type = Type::NameOfRegisteredTypes[readerTypeName]; if (!type) { - xna_error_apply(err, XnaErrorCode::INVALID_OPERATION); - return false; + throw std::runtime_error("ContentTypeReaderManager::InstantiateTypeReader: registered type is null."); } if (ContentTypeReaderManager::readerTypeToReader.contains(type)) { @@ -136,12 +128,11 @@ namespace xna { return true; } - void ContentTypeReaderManager::AddTypeReader(String const& readerTypeName, sptr& contentReader, sptr& reader, xna_error_ptr_arg) + void ContentTypeReaderManager::AddTypeReader(String const& readerTypeName, sptr& contentReader, sptr& reader) { auto targetType = reader->TargetType(); if (ContentTypeReaderManager::targetTypeToReader.contains(targetType)) { - xna_error_apply(err, XnaErrorCode::INVALID_OPERATION); return; } @@ -156,7 +147,7 @@ namespace xna { return; for (size_t i = 0; i < newTypeReaders.size(); ++i) { - auto newTypeReader = newTypeReaders[i]; + auto& newTypeReader = newTypeReaders[i]; ContentTypeReaderManager::RollbackAddReader(ContentTypeReaderManager::nameToReader, newTypeReader); ContentTypeReaderManager::RollbackAddReader(ContentTypeReaderManager::targetTypeToReader, newTypeReader); ContentTypeReaderManager::RollbackAddReader(ContentTypeReaderManager::readerTypeToReader, newTypeReader); diff --git a/inc/content/typereadermanager.hpp b/inc/content/typereadermanager.hpp index 58f3a55..71324d4 100644 --- a/inc/content/typereadermanager.hpp +++ b/inc/content/typereadermanager.hpp @@ -89,14 +89,14 @@ namespace xna { //-------------------------------------------------------// // ContentTypeReaderManager // //-------------------------------------------------------// + + //A manager that constructs and keeps track of type reader objects. class ContentTypeReaderManager { public: - static std::vector ReadTypeManifest(Int typeCount, sptr& contentReader, xna_error_nullarg); - static sptr GetTypeReader(sptr const& targetType, sptr& contentReader, xna_error_nullarg); - - inline sptr GetTypeReader(sptr const& targetType, xna_error_nullarg) { - return ContentTypeReaderManager::GetTypeReader(targetType, this->contentReader, err); - } + static std::vector ReadTypeManifest(Int typeCount, sptr& contentReader); + + //Looks up a reader for the specified type. + static sptr GetTypeReader(sptr const& targetType); inline static bool ContainsTypeReader(sptr const& targetType) { return ContentTypeReaderManager::targetTypeToReader.contains(targetType); @@ -104,9 +104,9 @@ namespace xna { private: ContentTypeReaderManager(sptr& contentReader); - static sptr GetTypeReader(String const& readerTypeName, sptr& contentReader, std::vector& newTypeReaders, xna_error_nullarg); - static bool InstantiateTypeReader(String const& readerTypeName, sptr& contentReader, sptr& reader, xna_error_nullarg); - static void AddTypeReader(String const& readerTypeName, sptr& contentReader, sptr& reader, xna_error_nullarg); + static sptr GetTypeReader(String const& readerTypeName, sptr& contentReader, std::vector& newTypeReaders); + static bool InstantiateTypeReader(String const& readerTypeName, sptr& contentReader, sptr& reader); + static void AddTypeReader(String const& readerTypeName, sptr& contentReader, sptr& reader); static void RollbackAddReaders(std::vector>& newTypeReaders); static void RollbackAddReader(std::map& dictionary, sptr& reader); diff --git a/samples/02_PlatfformerStarterKit/level.cpp b/samples/02_PlatfformerStarterKit/level.cpp index 6d70f62..453cb12 100644 --- a/samples/02_PlatfformerStarterKit/level.cpp +++ b/samples/02_PlatfformerStarterKit/level.cpp @@ -59,9 +59,9 @@ namespace PlatformerStarterKit { } if (!player) - std::exception("A level must have a starting point."); + throw std::runtime_error("A level must have a starting point."); if (exit == InvalidPosition) - std::exception("A level must have an exit."); + throw std::runtime_error("A level must have an exit."); } Tile Level::LoadTile(char tileType, int x, int y) { @@ -93,6 +93,8 @@ namespace PlatformerStarterKit { default: std::exception("Unsupported tile type character"); } + + return Tile(nullptr, TileCollision::Passable);; } Tile Level::LoadTile(xna::String const& name, TileCollision collision) {