From 7b02207537d35bfa1714bf8beafc921f717d100a Mon Sep 17 00:00:00 2001
From: 单军华
Date: Wed, 11 Jul 2018 10:47:42 +0800
Subject: [PATCH] 首次上传
---
screendisplay/Pods/YYCategories/YYCategories/YYCategoriesMacro.h | 337 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 337 insertions(+), 0 deletions(-)
diff --git a/screendisplay/Pods/YYCategories/YYCategories/YYCategoriesMacro.h b/screendisplay/Pods/YYCategories/YYCategories/YYCategoriesMacro.h
new file mode 100755
index 0000000..65d52a9
--- /dev/null
+++ b/screendisplay/Pods/YYCategories/YYCategories/YYCategoriesMacro.h
@@ -0,0 +1,337 @@
+//
+// YYCategoriesMacro.h
+// YYCategories <https://github.com/ibireme/YYCategories>
+//
+// Created by ibireme on 13/3/29.
+// Copyright (c) 2015 ibireme.
+//
+// This source code is licensed under the MIT-style license found in the
+// LICENSE file in the root directory of this source tree.
+//
+
+#import <UIKit/UIKit.h>
+#import <sys/time.h>
+#import <pthread.h>
+
+#ifndef YYCategoriesMacro_h
+#define YYCategoriesMacro_h
+
+#ifdef __cplusplus
+#define YY_EXTERN_C_BEGIN extern "C" {
+#define YY_EXTERN_C_END }
+#else
+#define YY_EXTERN_C_BEGIN
+#define YY_EXTERN_C_END
+#endif
+
+
+
+YY_EXTERN_C_BEGIN
+
+#ifndef YY_CLAMP // return the clamped value
+#define YY_CLAMP(_x_, _low_, _high_) (((_x_) > (_high_)) ? (_high_) : (((_x_) < (_low_)) ? (_low_) : (_x_)))
+#endif
+
+#ifndef YY_SWAP // swap two value
+#define YY_SWAP(_a_, _b_) do { __typeof__(_a_) _tmp_ = (_a_); (_a_) = (_b_); (_b_) = _tmp_; } while (0)
+#endif
+
+
+#define YYAssertNil(condition, description, ...) NSAssert(!(condition), (description), ##__VA_ARGS__)
+#define YYCAssertNil(condition, description, ...) NSCAssert(!(condition), (description), ##__VA_ARGS__)
+
+#define YYAssertNotNil(condition, description, ...) NSAssert((condition), (description), ##__VA_ARGS__)
+#define YYCAssertNotNil(condition, description, ...) NSCAssert((condition), (description), ##__VA_ARGS__)
+
+#define YYAssertMainThread() NSAssert([NSThread isMainThread], @"This method must be called on the main thread")
+#define YYCAssertMainThread() NSCAssert([NSThread isMainThread], @"This method must be called on the main thread")
+
+
+/**
+ Add this macro before each category implementation, so we don't have to use
+ -all_load or -force_load to load object files from static libraries that only
+ contain categories and no classes.
+ More info: http://developer.apple.com/library/mac/#qa/qa2006/qa1490.html .
+ *******************************************************************************
+ Example:
+ YYSYNTH_DUMMY_CLASS(NSString_YYAdd)
+ */
+#ifndef YYSYNTH_DUMMY_CLASS
+#define YYSYNTH_DUMMY_CLASS(_name_) \
+@interface YYSYNTH_DUMMY_CLASS_ ## _name_ : NSObject @end \
+@implementation YYSYNTH_DUMMY_CLASS_ ## _name_ @end
+#endif
+
+
+/**
+ Synthsize a dynamic object property in @implementation scope.
+ It allows us to add custom properties to existing classes in categories.
+
+ @param association ASSIGN / RETAIN / COPY / RETAIN_NONATOMIC / COPY_NONATOMIC
+ @warning #import <objc/runtime.h>
+ *******************************************************************************
+ Example:
+ @interface NSObject (MyAdd)
+ @property (nonatomic, retain) UIColor *myColor;
+ @end
+
+ #import <objc/runtime.h>
+ @implementation NSObject (MyAdd)
+ YYSYNTH_DYNAMIC_PROPERTY_OBJECT(myColor, setMyColor, RETAIN, UIColor *)
+ @end
+ */
+#ifndef YYSYNTH_DYNAMIC_PROPERTY_OBJECT
+#define YYSYNTH_DYNAMIC_PROPERTY_OBJECT(_getter_, _setter_, _association_, _type_) \
+- (void)_setter_ : (_type_)object { \
+ [self willChangeValueForKey:@#_getter_]; \
+ objc_setAssociatedObject(self, _cmd, object, OBJC_ASSOCIATION_ ## _association_); \
+ [self didChangeValueForKey:@#_getter_]; \
+} \
+- (_type_)_getter_ { \
+ return objc_getAssociatedObject(self, @selector(_setter_:)); \
+}
+#endif
+
+
+/**
+ Synthsize a dynamic c type property in @implementation scope.
+ It allows us to add custom properties to existing classes in categories.
+
+ @warning #import <objc/runtime.h>
+ *******************************************************************************
+ Example:
+ @interface NSObject (MyAdd)
+ @property (nonatomic, retain) CGPoint myPoint;
+ @end
+
+ #import <objc/runtime.h>
+ @implementation NSObject (MyAdd)
+ YYSYNTH_DYNAMIC_PROPERTY_CTYPE(myPoint, setMyPoint, CGPoint)
+ @end
+ */
+#ifndef YYSYNTH_DYNAMIC_PROPERTY_CTYPE
+#define YYSYNTH_DYNAMIC_PROPERTY_CTYPE(_getter_, _setter_, _type_) \
+- (void)_setter_ : (_type_)object { \
+ [self willChangeValueForKey:@#_getter_]; \
+ NSValue *value = [NSValue value:&object withObjCType:@encode(_type_)]; \
+ objc_setAssociatedObject(self, _cmd, value, OBJC_ASSOCIATION_RETAIN); \
+ [self didChangeValueForKey:@#_getter_]; \
+} \
+- (type)_getter_ { \
+ _type_ cValue = { 0 }; \
+ NSValue *value = objc_getAssociatedObject(self, @selector(_setter_:)); \
+ [value getValue:&cValue]; \
+ return cValue; \
+}
+#endif
+
+/**
+ Synthsize a weak or strong reference.
+
+ Example:
+ @weakify(self)
+ [self doSomething^{
+ @strongify(self)
+ if (!self) return;
+ ...
+ }];
+
+ */
+#ifndef weakify
+ #if DEBUG
+ #if __has_feature(objc_arc)
+ #define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;
+ #else
+ #define weakify(object) autoreleasepool{} __block __typeof__(object) block##_##object = object;
+ #endif
+ #else
+ #if __has_feature(objc_arc)
+ #define weakify(object) try{} @finally{} {} __weak __typeof__(object) weak##_##object = object;
+ #else
+ #define weakify(object) try{} @finally{} {} __block __typeof__(object) block##_##object = object;
+ #endif
+ #endif
+#endif
+
+#ifndef strongify
+ #if DEBUG
+ #if __has_feature(objc_arc)
+ #define strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object;
+ #else
+ #define strongify(object) autoreleasepool{} __typeof__(object) object = block##_##object;
+ #endif
+ #else
+ #if __has_feature(objc_arc)
+ #define strongify(object) try{} @finally{} __typeof__(object) object = weak##_##object;
+ #else
+ #define strongify(object) try{} @finally{} __typeof__(object) object = block##_##object;
+ #endif
+ #endif
+#endif
+
+
+/**
+ Convert CFRange to NSRange
+ @param range CFRange @return NSRange
+ */
+static inline NSRange YYNSRangeFromCFRange(CFRange range) {
+ return NSMakeRange(range.location, range.length);
+}
+
+/**
+ Convert NSRange to CFRange
+ @param range NSRange @return CFRange
+ */
+static inline CFRange YYCFRangeFromNSRange(NSRange range) {
+ return CFRangeMake(range.location, range.length);
+}
+
+/**
+ Same as CFAutorelease(), compatible for iOS6
+ @param arg CFObject @return same as input
+ */
+static inline CFTypeRef YYCFAutorelease(CFTypeRef CF_RELEASES_ARGUMENT arg) {
+ if (((long)CFAutorelease + 1) != 1) {
+ return CFAutorelease(arg);
+ } else {
+ id __autoreleasing obj = CFBridgingRelease(arg);
+ return (__bridge CFTypeRef)obj;
+ }
+}
+
+/**
+ Profile time cost.
+ @param ^block code to benchmark
+ @param ^complete code time cost (millisecond)
+
+ Usage:
+ YYBenchmark(^{
+ // code
+ }, ^(double ms) {
+ NSLog("time cost: %.2f ms",ms);
+ });
+
+ */
+static inline void YYBenchmark(void (^block)(void), void (^complete)(double ms)) {
+ // <QuartzCore/QuartzCore.h> version
+ /*
+ extern double CACurrentMediaTime (void);
+ double begin, end, ms;
+ begin = CACurrentMediaTime();
+ block();
+ end = CACurrentMediaTime();
+ ms = (end - begin) * 1000.0;
+ complete(ms);
+ */
+
+ // <sys/time.h> version
+ struct timeval t0, t1;
+ gettimeofday(&t0, NULL);
+ block();
+ gettimeofday(&t1, NULL);
+ double ms = (double)(t1.tv_sec - t0.tv_sec) * 1e3 + (double)(t1.tv_usec - t0.tv_usec) * 1e-3;
+ complete(ms);
+}
+
+static inline NSDate *_YYCompileTime(const char *data, const char *time) {
+ NSString *timeStr = [NSString stringWithFormat:@"%s %s",data,time];
+ NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
+ NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+ [formatter setDateFormat:@"MMM dd yyyy HH:mm:ss"];
+ [formatter setLocale:locale];
+ return [formatter dateFromString:timeStr];
+}
+
+/**
+ Get compile timestamp.
+ @return A new date object set to the compile date and time.
+ */
+#ifndef YYCompileTime
+// use macro to avoid compile warning when use pch file
+#define YYCompileTime() _YYCompileTime(__DATE__, __TIME__)
+#endif
+
+/**
+ Returns a dispatch_time delay from now.
+ */
+static inline dispatch_time_t dispatch_time_delay(NSTimeInterval second) {
+ return dispatch_time(DISPATCH_TIME_NOW, (int64_t)(second * NSEC_PER_SEC));
+}
+
+/**
+ Returns a dispatch_wall_time delay from now.
+ */
+static inline dispatch_time_t dispatch_walltime_delay(NSTimeInterval second) {
+ return dispatch_walltime(DISPATCH_TIME_NOW, (int64_t)(second * NSEC_PER_SEC));
+}
+
+/**
+ Returns a dispatch_wall_time from NSDate.
+ */
+static inline dispatch_time_t dispatch_walltime_date(NSDate *date) {
+ NSTimeInterval interval;
+ double second, subsecond;
+ struct timespec time;
+ dispatch_time_t milestone;
+
+ interval = [date timeIntervalSince1970];
+ subsecond = modf(interval, &second);
+ time.tv_sec = second;
+ time.tv_nsec = subsecond * NSEC_PER_SEC;
+ milestone = dispatch_walltime(&time, 0);
+ return milestone;
+}
+
+/**
+ Whether in main queue/thread.
+ */
+static inline bool dispatch_is_main_queue() {
+ return pthread_main_np() != 0;
+}
+
+/**
+ Submits a block for asynchronous execution on a main queue and returns immediately.
+ */
+static inline void dispatch_async_on_main_queue(void (^block)()) {
+ if (pthread_main_np()) {
+ block();
+ } else {
+ dispatch_async(dispatch_get_main_queue(), block);
+ }
+}
+
+/**
+ Submits a block for execution on a main queue and waits until the block completes.
+ */
+static inline void dispatch_sync_on_main_queue(void (^block)()) {
+ if (pthread_main_np()) {
+ block();
+ } else {
+ dispatch_sync(dispatch_get_main_queue(), block);
+ }
+}
+
+/**
+ Initialize a pthread mutex.
+ */
+static inline void pthread_mutex_init_recursive(pthread_mutex_t *mutex, bool recursive) {
+#define YYMUTEX_ASSERT_ON_ERROR(x_) do { \
+__unused volatile int res = (x_); \
+assert(res == 0); \
+} while (0)
+ assert(mutex != NULL);
+ if (!recursive) {
+ YYMUTEX_ASSERT_ON_ERROR(pthread_mutex_init(mutex, NULL));
+ } else {
+ pthread_mutexattr_t attr;
+ YYMUTEX_ASSERT_ON_ERROR(pthread_mutexattr_init (&attr));
+ YYMUTEX_ASSERT_ON_ERROR(pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE));
+ YYMUTEX_ASSERT_ON_ERROR(pthread_mutex_init (mutex, &attr));
+ YYMUTEX_ASSERT_ON_ERROR(pthread_mutexattr_destroy (&attr));
+ }
+#undef YYMUTEX_ASSERT_ON_ERROR
+}
+
+
+YY_EXTERN_C_END
+#endif
--
Gitblit v1.8.0