Add some NODISCARD attributes and uncomment scope_exit utility code
This commit is contained in:
parent
6877782d96
commit
9a2ae3c96f
@ -5,6 +5,8 @@
|
||||
|| defined(CPPTRACE_GET_SYMBOLS_WITH_DBGHELP) \
|
||||
|| defined(CPPTRACE_DEMANGLE_WITH_WINAPI)
|
||||
|
||||
#include "utils/common.hpp"
|
||||
|
||||
#include <unordered_map>
|
||||
#include <mutex>
|
||||
|
||||
@ -20,8 +22,8 @@ namespace detail {
|
||||
~dbghelp_syminit_info();
|
||||
void release();
|
||||
|
||||
static dbghelp_syminit_info make_not_owned(void* handle);
|
||||
static dbghelp_syminit_info make_owned(void* handle, bool should_close_handle);
|
||||
NODISCARD static dbghelp_syminit_info make_not_owned(void* handle);
|
||||
NODISCARD static dbghelp_syminit_info make_owned(void* handle, bool should_close_handle);
|
||||
|
||||
dbghelp_syminit_info(const dbghelp_syminit_info&) = delete;
|
||||
dbghelp_syminit_info(dbghelp_syminit_info&&);
|
||||
@ -39,7 +41,7 @@ namespace detail {
|
||||
// - Calls SymInitialize and returns an owning dbghelp_syminit_info which will handle cleanup
|
||||
dbghelp_syminit_info ensure_syminit();
|
||||
|
||||
std::unique_lock<std::recursive_mutex> get_dbghelp_lock();
|
||||
NODISCARD std::unique_lock<std::recursive_mutex> get_dbghelp_lock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -278,31 +278,31 @@ namespace detail {
|
||||
}
|
||||
};
|
||||
|
||||
// template<typename F>
|
||||
// class scope_guard {
|
||||
// F f;
|
||||
// bool active;
|
||||
// public:
|
||||
// scope_guard(F&& f) : f(std::forward<F>(f)), active(true) {}
|
||||
// ~scope_guard() {
|
||||
// if(active) {
|
||||
// f();
|
||||
// }
|
||||
// }
|
||||
// scope_guard(const scope_guard&) = delete;
|
||||
// scope_guard(scope_guard&& other) : f(std::move(other.f)), active(exchange(other.active, false)) {}
|
||||
// scope_guard& operator=(const scope_guard&) = delete;
|
||||
// scope_guard& operator=(scope_guard&& other) {
|
||||
// f = std::move(other.f);
|
||||
// active = exchange(other.active, false);
|
||||
// return *this;
|
||||
// }
|
||||
// };
|
||||
template<typename F>
|
||||
class scope_guard {
|
||||
F f;
|
||||
bool active;
|
||||
public:
|
||||
scope_guard(F&& f) : f(std::forward<F>(f)), active(true) {}
|
||||
~scope_guard() {
|
||||
if(active) {
|
||||
f();
|
||||
}
|
||||
}
|
||||
scope_guard(const scope_guard&) = delete;
|
||||
scope_guard(scope_guard&& other) : f(std::move(other.f)), active(exchange(other.active, false)) {}
|
||||
scope_guard& operator=(const scope_guard&) = delete;
|
||||
scope_guard& operator=(scope_guard&& other) {
|
||||
f = std::move(other.f);
|
||||
active = exchange(other.active, false);
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
// template<typename F>
|
||||
// auto scope_exit(F&& f) {
|
||||
// return scope_guard<F>(std::forward<F>(f));
|
||||
// }
|
||||
template<typename F>
|
||||
NODISCARD auto scope_exit(F&& f) {
|
||||
return scope_guard<F>(std::forward<F>(f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user