123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- //
- // TDSMacros.h
- // TDSCommon
- //
- // Created by Insomnia on 2020/10/19.
- //
- #import <Foundation/Foundation.h>
- #import <TapCommonSDK/TDSmetamacro.h>
- #ifndef TDS_LOCK
- #define TDS_LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER);
- #endif
- #ifndef TDS_UNLOCK
- #define TDS_UNLOCK(lock) dispatch_semaphore_signal(lock);
- #endif
- #define TDSSemaphoreCreate \
- static dispatch_semaphore_t signalSemaphore; \
- static dispatch_once_t onceTokenSemaphore; \
- dispatch_once(&onceTokenSemaphore, ^{ \
- signalSemaphore = dispatch_semaphore_create(1); \
- });
- #define TDSSemaphoreWait TDS_LOCK(signalSemaphore)
- #define TDSSemaphoreSignal TDS_UNLOCK(signalSemaphore)
- #ifndef weakify
- #define weakify(...) \
- tds_keywordify \
- metamacro_foreach_cxt(tds_weakify_,, __weak, __VA_ARGS__)
- #endif
- #ifndef strongify
- #define strongify(...) \
- tds_keywordify \
- _Pragma("clang diagnostic push") \
- _Pragma("clang diagnostic ignored \"-Wshadow\"") \
- metamacro_foreach(tds_strongify_,, __VA_ARGS__) \
- _Pragma("clang diagnostic pop")
- #endif
- #define tds_weakify_(INDEX, CONTEXT, VAR) \
- CONTEXT __typeof__(VAR) metamacro_concat(VAR, _weak_) = (VAR);
- #define tds_strongify_(INDEX, VAR) \
- __strong __typeof__(VAR) VAR = metamacro_concat(VAR, _weak_);
- #if DEBUG
- #define tds_keywordify autoreleasepool {}
- #else
- #define tds_keywordify try {} @catch (...) {}
- #endif
- #ifndef dispatch_main_async_safe
- #define dispatch_main_async_safe(block)\
- if (dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL) == dispatch_queue_get_label(dispatch_get_main_queue())) {\
- block();\
- } else {\
- dispatch_async(dispatch_get_main_queue(), block);\
- }
- #endif
|