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