From 1a95c314ff09d794da3909c2dd59f7f07a37da6f Mon Sep 17 00:00:00 2001 From: Lynix Date: Tue, 8 Mar 2016 13:58:09 +0100 Subject: [PATCH] Core/ParameterList: Make errors silent by default Former-commit-id: 38d1613681a65194cb7392903c9bc20f912561a3 --- include/Nazara/Core/ParameterList.hpp | 4 +- src/Nazara/Core/ParameterList.cpp | 135 ++++++++++++-------------- 2 files changed, 64 insertions(+), 75 deletions(-) diff --git a/include/Nazara/Core/ParameterList.hpp b/include/Nazara/Core/ParameterList.hpp index bd4b01b58..2475185d7 100644 --- a/include/Nazara/Core/ParameterList.hpp +++ b/include/Nazara/Core/ParameterList.hpp @@ -86,10 +86,10 @@ namespace Nz Value value; }; - using ParameterMap = std::unordered_map; - + Parameter& CreateValue(const String& name); void DestroyValue(Parameter& parameter); + using ParameterMap = std::unordered_map; ParameterMap m_parameters; }; } diff --git a/src/Nazara/Core/ParameterList.cpp b/src/Nazara/Core/ParameterList.cpp index 405ebd1cd..5edd8f976 100644 --- a/src/Nazara/Core/ParameterList.cpp +++ b/src/Nazara/Core/ParameterList.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -49,21 +50,23 @@ namespace Nz } /*! - * \brief Gets the boolean parameter by name + * \brief Gets a boolean parameter by name * \return true if success * * \param name Name of the variable * \param value Value to set * * \remark Produces a NazaraAssert if pointer is invalid - * \remark Produces a NazaraError if name is not a variable - * \remark Produces a NazaraError if value could not be convertible + * \remark Produces a silent NazaraError if name is not a variable + * \remark Produces a silent NazaraError if value could not be convertible */ bool ParameterList::GetBooleanParameter(const String& name, bool* value) const { NazaraAssert(value, "Invalid pointer"); + ErrorFlags flags(ErrorFlag_Silent | ErrorFlag_ThrowExceptionDisabled); + auto it = m_parameters.find(name); if (it == m_parameters.end()) { @@ -105,21 +108,23 @@ namespace Nz } /*! - * \brief Gets the float parameter by name + * \brief Gets a float parameter by name * \return true if success * * \param name Name of the variable * \param value Value to set * * \remark Produces a NazaraAssert if pointer is invalid - * \remark Produces a NazaraError if name is not a variable - * \remark Produces a NazaraError if value could not be convertible + * \remark Produces a silent NazaraError if name is not a variable + * \remark Produces a silent NazaraError if value could not be convertible */ bool ParameterList::GetFloatParameter(const String& name, float* value) const { NazaraAssert(value, "Invalid pointer"); + ErrorFlags flags(ErrorFlag_Silent | ErrorFlag_ThrowExceptionDisabled); + auto it = m_parameters.find(name); if (it == m_parameters.end()) { @@ -161,21 +166,23 @@ namespace Nz } /*! - * \brief Gets the integer parameter by name + * \brief Gets a integer parameter by name * \return true if success * * \param name Name of the variable * \param value Value to set * * \remark Produces a NazaraAssert if pointer is invalid - * \remark Produces a NazaraError if name is not a variable - * \remark Produces a NazaraError if value could not be convertible + * \remark Produces a silent NazaraError if name is not a variable + * \remark Produces a silent NazaraError if value could not be convertible */ bool ParameterList::GetIntegerParameter(const String& name, int* value) const { NazaraAssert(value, "Invalid pointer"); + ErrorFlags flags(ErrorFlag_Silent | ErrorFlag_ThrowExceptionDisabled); + auto it = m_parameters.find(name); if (it == m_parameters.end()) { @@ -222,15 +229,13 @@ namespace Nz } /*! - * \brief Gets the parameter by name - * \return true if success + * \brief Gets a parameter type by name + * \return true if the parameter is present * * \param name Name of the variable - * \param type Type to set + * \param type Pointer to a variable to hold result * - * \remark Produces a NazaraAssert if pointer is invalid - * \remark Produces a NazaraError if name is not a variable - * \remark Produces a NazaraError if value could not be convertible + * \remark Produces a NazaraAssert if type is invalid */ bool ParameterList::GetParameterType(const String& name, ParameterType* type) const @@ -247,21 +252,23 @@ namespace Nz } /*! - * \brief Gets the pointer parameter by name + * \brief Gets a pointer parameter by name * \return true if success * * \param name Name of the variable * \param value Value to set * * \remark Produces a NazaraAssert if pointer is invalid - * \remark Produces a NazaraError if name is not a variable - * \remark Produces a NazaraError if value could not be convertible + * \remark Produces a silent NazaraError if name is not a variable + * \remark Produces a silent NazaraError if value could not be convertible */ bool ParameterList::GetPointerParameter(const String& name, void** value) const { NazaraAssert(value, "Invalid pointer"); + ErrorFlags flags(ErrorFlag_Silent | ErrorFlag_ThrowExceptionDisabled); + auto it = m_parameters.find(name); if (it == m_parameters.end()) { @@ -292,21 +299,23 @@ namespace Nz } /*! - * \brief Gets the string parameter by name + * \brief Gets a string parameter by name * \return true if success * * \param name Name of the variable * \param value Value to set * * \remark Produces a NazaraAssert if pointer is invalid - * \remark Produces a NazaraError if name is not a variable - * \remark Produces a NazaraError if value could not be convertible + * \remark Produces a silent NazaraError if name is not a variable + * \remark Produces a silent NazaraError if value could not be convertible */ bool ParameterList::GetStringParameter(const String& name, String* value) const { NazaraAssert(value, "Invalid pointer"); + ErrorFlags flags(ErrorFlag_Silent | ErrorFlag_ThrowExceptionDisabled); + auto it = m_parameters.find(name); if (it == m_parameters.end()) { @@ -350,21 +359,23 @@ namespace Nz } /*! - * \brief Gets the user parameter by name + * \brief Gets a user parameter by name * \return true if success * * \param name Name of the variable * \param value Value to set * * \remark Produces a NazaraAssert if pointer is invalid - * \remark Produces a NazaraError if name is not a variable - * \remark Produces a NazaraError if value could not be convertible + * \remark Produces a silent NazaraError if name is not a variable + * \remark Produces a silent NazaraError if value could not be convertible */ bool ParameterList::GetUserdataParameter(const String& name, void** value) const { NazaraAssert(value, "Invalid pointer"); + ErrorFlags flags(ErrorFlag_Silent | ErrorFlag_ThrowExceptionDisabled); + auto it = m_parameters.find(name); if (it == m_parameters.end()) { @@ -422,12 +433,7 @@ namespace Nz void ParameterList::SetParameter(const String& name) { - std::pair pair = m_parameters.insert(std::make_pair(name, Parameter())); - Parameter& parameter = pair.first->second; - - if (!pair.second) - DestroyValue(parameter); - + Parameter& parameter = CreateValue(name); parameter.type = ParameterType_None; } @@ -440,12 +446,7 @@ namespace Nz void ParameterList::SetParameter(const String& name, const String& value) { - std::pair pair = m_parameters.insert(std::make_pair(name, Parameter())); - Parameter& parameter = pair.first->second; - - if (!pair.second) - DestroyValue(parameter); - + Parameter& parameter = CreateValue(name); parameter.type = ParameterType_String; PlacementNew(¶meter.value.stringVal, value); @@ -460,12 +461,7 @@ namespace Nz void ParameterList::SetParameter(const String& name, const char* value) { - std::pair pair = m_parameters.insert(std::make_pair(name, Parameter())); - Parameter& parameter = pair.first->second; - - if (!pair.second) - DestroyValue(parameter); - + Parameter& parameter = CreateValue(name); parameter.type = ParameterType_String; PlacementNew(¶meter.value.stringVal, value); @@ -480,12 +476,7 @@ namespace Nz void ParameterList::SetParameter(const String& name, void* value) { - std::pair pair = m_parameters.insert(std::make_pair(name, Parameter())); - Parameter& parameter = pair.first->second; - - if (!pair.second) - DestroyValue(parameter); - + Parameter& parameter = CreateValue(name); parameter.type = ParameterType_Pointer; parameter.value.ptrVal = value; } @@ -500,12 +491,7 @@ namespace Nz void ParameterList::SetParameter(const String& name, void* value, Destructor destructor) { - std::pair pair = m_parameters.insert(std::make_pair(name, Parameter())); - Parameter& parameter = pair.first->second; - - if (!pair.second) - DestroyValue(parameter); - + Parameter& parameter = CreateValue(name); parameter.type = ParameterType_Userdata; parameter.value.userdataVal = new Parameter::UserdataValue(destructor, value); } @@ -519,12 +505,7 @@ namespace Nz void ParameterList::SetParameter(const String& name, bool value) { - std::pair pair = m_parameters.insert(std::make_pair(name, Parameter())); - Parameter& parameter = pair.first->second; - - if (!pair.second) - DestroyValue(parameter); - + Parameter& parameter = CreateValue(name); parameter.type = ParameterType_Boolean; parameter.value.boolVal = value; } @@ -538,12 +519,7 @@ namespace Nz void ParameterList::SetParameter(const String& name, float value) { - std::pair pair = m_parameters.insert(std::make_pair(name, Parameter())); - Parameter& parameter = pair.first->second; - - if (!pair.second) - DestroyValue(parameter); - + Parameter& parameter = CreateValue(name); parameter.type = ParameterType_Float; parameter.value.floatVal = value; } @@ -557,12 +533,7 @@ namespace Nz void ParameterList::SetParameter(const String& name, int value) { - std::pair pair = m_parameters.insert(std::make_pair(name, Parameter())); - Parameter& parameter = pair.first->second; - - if (!pair.second) - DestroyValue(parameter); - + Parameter& parameter = CreateValue(name); parameter.type = ParameterType_Integer; parameter.value.intVal = value; } @@ -612,12 +583,30 @@ namespace Nz return *this; } + /*! + * \brief Create an uninitialized value of a set name + * + * \param name Name of the parameter + * \param value Value of the parameter + * + * \remark The previous value if any gets destroyed + */ + ParameterList::Parameter& ParameterList::CreateValue(const String& name) + { + std::pair pair = m_parameters.insert(std::make_pair(name, Parameter())); + Parameter& parameter = pair.first->second; + + if (!pair.second) + DestroyValue(parameter); + + return parameter; + } + /*! * \brief Destroys the value for the parameter * * \param parameter Parameter to destroy */ - void ParameterList::DestroyValue(Parameter& parameter) { switch (parameter.type)