mirror of
https://github.com/slendidev/lunar.git
synced 2025-12-16 12:09:52 +02:00
26
src/Util.h
Normal file
26
src/Util.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include <string_view>
|
||||
using namespace std::string_view_literals;
|
||||
|
||||
template<typename F> struct privDefer {
|
||||
F f;
|
||||
privDefer(F f)
|
||||
: f(f)
|
||||
{
|
||||
}
|
||||
~privDefer() { f(); }
|
||||
};
|
||||
|
||||
template<typename F> privDefer<F> defer_func(F f) { return privDefer<F>(f); }
|
||||
|
||||
#define DEFER_1(x, y) x##y
|
||||
#define DEFER_2(x, y) DEFER_1(x, y)
|
||||
#define DEFER_3(x) DEFER_2(x, __COUNTER__)
|
||||
#define defer(code) auto DEFER_3(_defer_) = defer_func([&]() { code; })
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
# define ALIGN(a) __declspec(align(a))
|
||||
#else
|
||||
# define ALIGN(a) __attribute__((aligned(a)))
|
||||
#endif
|
||||
Reference in New Issue
Block a user