From 65f9982e99a6d9bea8084b7e15bc6c72ff535d8b Mon Sep 17 00:00:00 2001 From: Pablo Tello Date: Thu, 24 May 2018 11:40:15 +0100 Subject: COMPMID-1038: stoi and stoul cleanup. Change-Id: I0d981a06655cdd86c71fddbd07303d781577d0fd Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/132620 Reviewed-by: Giorgio Arena Tested-by: Jenkins Reviewed-by: Anthony Barbier --- support/ToolchainSupport.h | 87 +++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 52 deletions(-) (limited to 'support') diff --git a/support/ToolchainSupport.h b/support/ToolchainSupport.h index 88c17009cc..ece966704f 100644 --- a/support/ToolchainSupport.h +++ b/support/ToolchainSupport.h @@ -25,6 +25,7 @@ #define ARM_COMPUTE_TEST_TOOLCHAINSUPPORT #include +#include #include #include #include @@ -42,38 +43,29 @@ namespace support { namespace cpp11 { -#if(__ANDROID__ || BARE_METAL) -/** Convert integer and float values to string. - * - * @note This function implements the same behaviour as std::to_string. The - * latter is missing in some Android toolchains. - * - * @param[in] value Value to be converted to string. - * - * @return String representation of @p value. - */ -template ::type>::value, int>::type = 0> -inline std::string to_string(T && value) +enum class NumericBase { - std::stringstream stream; - stream << std::forward(value); - return stream.str(); -} + BASE_10, + BASE_16 +}; /** Convert string values to integer. * * @note This function implements the same behaviour as std::stoi. The latter * is missing in some Android toolchains. * - * @param[in] str String to be converted to int. + * @param[in] str String to be converted to int. + * @param[in] pos If idx is not a null pointer, the function sets the value of pos to the position of the first character in str after the number. + * @param[in] base Numeric base used to interpret the string. * * @return Integer representation of @p str. */ -inline int stoi(const std::string &str, std::size_t *pos = 0, int base = 10) +inline int stoi(const std::string &str, std::size_t *pos = 0, NumericBase base = NumericBase::BASE_10) { + assert(base == NumericBase::BASE_10 || base == NumericBase::BASE_16); unsigned int x; std::stringstream ss; - if(base == 16) + if(base == NumericBase::BASE_16) { ss << std::hex; } @@ -87,15 +79,18 @@ inline int stoi(const std::string &str, std::size_t *pos = 0, int base = 10) * @note This function implements the same behaviour as std::stoul. The latter * is missing in some Android toolchains. * - * @param[in] str String to be converted to unsigned long. + * @param[in] str String to be converted to unsigned long. + * @param[in] pos If idx is not a null pointer, the function sets the value of pos to the position of the first character in str after the number. + * @param[in] base Numeric base used to interpret the string. * * @return Unsigned long representation of @p str. */ -inline unsigned long stoul(const std::string &str, std::size_t *pos = 0, int base = 10) +inline unsigned long stoul(const std::string &str, std::size_t *pos = 0, NumericBase base = NumericBase::BASE_10) { + assert(base == NumericBase::BASE_10 || base == NumericBase::BASE_16); std::stringstream stream; unsigned long value = 0; - if(base == 16) + if(base == NumericBase::BASE_16) { stream << std::hex; } @@ -104,6 +99,24 @@ inline unsigned long stoul(const std::string &str, std::size_t *pos = 0, int bas return value; } +#if(__ANDROID__ || BARE_METAL) +/** Convert integer and float values to string. + * + * @note This function implements the same behaviour as std::to_string. The + * latter is missing in some Android toolchains. + * + * @param[in] value Value to be converted to string. + * + * @return String representation of @p value. + */ +template ::type>::value, int>::type = 0> +inline std::string to_string(T && value) +{ + std::stringstream stream; + stream << std::forward(value); + return stream.str(); +} + /** Convert string values to float. * * @note This function implements the same behaviour as std::stof. The latter @@ -199,36 +212,6 @@ inline std::string to_string(T &&value) return ::std::to_string(std::forward(value)); } -/** Convert string values to integer. - * - * @note This function acts as a convenience wrapper around std::stoi. The - * latter is missing in some Android toolchains. - * - * @param[in] args Arguments forwarded to std::stoi. - * - * @return Integer representation of input string. - */ -template -int stoi(Ts &&... args) -{ - return ::std::stoi(std::forward(args)...); -} - -/** Convert string values to unsigned long. - * - * @note This function acts as a convenience wrapper around std::stoul. The - * latter is missing in some Android toolchains. - * - * @param[in] args Arguments forwarded to std::stoul. - * - * @return Unsigned long representation of input string. - */ -template -int stoul(Ts &&... args) -{ - return ::std::stoul(std::forward(args)...); -} - /** Convert string values to float. * * @note This function acts as a convenience wrapper around std::stof. The -- cgit v1.2.1