15 #ifndef SHAKA_EMBEDDED_UTIL_UTILS_H_ 16 #define SHAKA_EMBEDDED_UTIL_UTILS_H_ 18 #include <glog/logging.h> 26 #include <type_traits> 27 #include <unordered_set> 42 explicit Finally(std::function<
void()> call);
58 template <
typename _Mutex>
60 explicit Unlocker(std::unique_lock<_Mutex>* lock) : lock_(lock) {
61 DCHECK(lock_->owns_lock());
70 std::unique_lock<_Mutex>*
lock_;
86 template <typename T, typename U>
88 return std::find(vec.begin(), vec.end(), std::forward<U>(elem)) != vec.end();
90 template <
typename T,
typename U>
91 bool contains(
const std::unordered_set<T>&
set, U&& elem) {
92 return set.count(std::forward<U>(elem)) != 0;
94 template <
typename List,
typename Elem>
98 list->erase(std::remove(list->begin(), list->end(), std::forward<Elem>(elem)),
105 #endif // SHAKA_EMBEDDED_UTIL_UTILS_H_ std::string ToAsciiLower(const std::string &source)
Unlocker(std::unique_lock< _Mutex > *lock)
Finally(std::function< void()> call)
std::string ToHexString(const uint8_t *data, size_t data_size)
bool contains(const std::vector< T > &vec, U &&elem)
std::string StringPrintf(const char *format,...)
#define SHAKA_NON_COPYABLE_OR_MOVABLE_TYPE(Type)
std::function< void()> call_
std::unique_lock< _Mutex > * lock_
std::string StringPrintfV(const char *format, va_list va)
void RemoveElement(List *list, Elem &&elem)
std::string TrimAsciiWhitespace(const std::string &source)
std::vector< std::string > StringSplit(const std::string &source, char split_on)
#define PRINTF_FORMAT(format, dots)