diff options
Diffstat (limited to 'arm_compute/core/utils/misc/Utility.h')
-rw-r--r-- | arm_compute/core/utils/misc/Utility.h | 57 |
1 files changed, 37 insertions, 20 deletions
diff --git a/arm_compute/core/utils/misc/Utility.h b/arm_compute/core/utils/misc/Utility.h index 646d66567a..22f10d74cc 100644 --- a/arm_compute/core/utils/misc/Utility.h +++ b/arm_compute/core/utils/misc/Utility.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Arm Limited. + * Copyright (c) 2017-2021, 2023 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -24,8 +24,11 @@ #ifndef ARM_COMPUTE_MISC_UTILITY_H #define ARM_COMPUTE_MISC_UTILITY_H +#include "arm_compute/core/Error.h" + #include <algorithm> #include <array> +#include <cstdint> #include <limits> #include <numeric> #include <vector> @@ -41,7 +44,7 @@ struct index_sequence }; template <std::size_t N, std::size_t... S> -struct index_sequence_generator : index_sequence_generator < N - 1, N - 1, S... > +struct index_sequence_generator : index_sequence_generator<N - 1, N - 1, S...> { }; @@ -55,17 +58,17 @@ template <std::size_t N> using index_sequence_t = typename index_sequence_generator<N>::type; template <typename T, std::size_t N, T val, T... vals> -struct generate_array : generate_array < T, N - 1, val, val, vals... > +struct generate_array : generate_array<T, N - 1, val, val, vals...> { }; template <typename T, T val, T... vals> struct generate_array<T, 0, val, vals...> { - static constexpr std::array<T, sizeof...(vals)> value{ vals... }; + static constexpr std::array<T, sizeof...(vals)> value{vals...}; }; -template <typename T, T val, T... vals> +template <typename T, T val, T... vals> constexpr std::array<T, sizeof...(vals)> generate_array<T, 0, val, vals...>::value; /** @endcond */ @@ -76,7 +79,7 @@ template <std::size_t... S, typename T = std::array<typename std::iterator_traits<Iterator>::value_type, sizeof...(S)>> T make_array(Iterator first, index_sequence<S...>) { - return T{ { first[S]... } }; + return T{{first[S]...}}; } } // namespace detail @@ -84,7 +87,7 @@ template <std::size_t N, typename Iterator> std::array<typename std::iterator_traits<Iterator>::value_type, N> make_array(Iterator first, Iterator last) { ARM_COMPUTE_UNUSED(last); - return detail::make_array(first, index_sequence_t<N> {}); + return detail::make_array(first, index_sequence_t<N>{}); } /** Performs clamping among a lower and upper value. @@ -116,7 +119,7 @@ inline void for_each(F &&) * @param[in] args Remaining arguments */ template <typename F, typename T, typename... Ts> -inline void for_each(F &&func, T &&arg, Ts &&... args) +inline void for_each(F &&func, T &&arg, Ts &&...args) { func(std::forward<T>(arg)); for_each(std::forward<F>(func), std::forward<Ts>(args)...); @@ -140,9 +143,11 @@ inline T &&foldl(F &&, T &&value) * @param[in] values Remaining arguments */ template <typename F, typename T, typename U, typename... Us> -inline auto foldl(F &&func, T &&initial, U &&value, Us &&... values) -> decltype(func(std::forward<T>(initial), std::forward<U>(value))) +inline auto foldl(F &&func, T &&initial, U &&value, Us &&...values) + -> decltype(func(std::forward<T>(initial), std::forward<U>(value))) { - return foldl(std::forward<F>(func), func(std::forward<T>(initial), std::forward<U>(value)), std::forward<Us>(values)...); + return foldl(std::forward<F>(func), func(std::forward<T>(initial), std::forward<U>(value)), + std::forward<Us>(values)...); } /** Perform an index sort of a given vector. @@ -157,11 +162,7 @@ std::vector<size_t> sort_indices(const std::vector<T> &v) std::vector<size_t> idx(v.size()); std::iota(idx.begin(), idx.end(), 0); - std::sort(idx.begin(), idx.end(), - [&v](size_t i1, size_t i2) - { - return v[i1] < v[i2]; - }); + std::sort(idx.begin(), idx.end(), [&v](size_t i1, size_t i2) { return v[i1] < v[i2]; }); return idx; } @@ -175,7 +176,7 @@ std::vector<size_t> sort_indices(const std::vector<T> &v) */ inline bool endswith(const std::string &str, const std::string &suffix) { - if(str.size() < suffix.size()) + if (str.size() < suffix.size()) { return false; } @@ -202,12 +203,28 @@ inline bool check_aligned(void *ptr, const size_t alignment) */ inline std::string tolower(std::string string) { - std::transform(string.begin(), string.end(), string.begin(), [](unsigned char c) - { - return std::tolower(c); - }); + std::transform(string.begin(), string.end(), string.begin(), [](unsigned char c) { return std::tolower(c); }); return string; } + +/** Get environment variable as a string + * + * @note Return empty string on bare-metal + * + * @param[in] env_name Name of the Environment variable to retrieve + * + * @return Environment variable content, or empty string if the variable is undefined or on bare-metal + */ +inline std::string getenv(const std::string &env_name) +{ +#ifdef BARE_METAL + ARM_COMPUTE_UNUSED(env_name); + return std::string{}; +#else // BARE_METAL + const auto env_chr = std::getenv(env_name.c_str()); + return env_chr == nullptr ? std::string{} : std::string{env_chr}; +#endif // BARE_METAL +} } // namespace utility } // namespace arm_compute #endif /* ARM_COMPUTE_MISC_UTILITY_H */ |