mirror of
				https://github.com/SoPat712/YTLitePlus.git
				synced 2025-10-31 12:54:13 -04:00 
			
		
		
		
	added files via upload
This commit is contained in:
		| @@ -0,0 +1,93 @@ | ||||
| // | ||||
| //  FLEXProtocolBuilder.m | ||||
| //  FLEX | ||||
| // | ||||
| //  Derived from MirrorKit. | ||||
| //  Created by Tanner on 7/4/15. | ||||
| //  Copyright (c) 2020 FLEX Team. All rights reserved. | ||||
| // | ||||
|  | ||||
| #import "FLEXProtocolBuilder.h" | ||||
| #import "FLEXProtocol.h" | ||||
| #import "FLEXProperty.h" | ||||
| #import <objc/runtime.h> | ||||
|  | ||||
| #define MutationAssertion(msg) if (self.isRegistered) { \ | ||||
|     [NSException \ | ||||
|         raise:NSInternalInconsistencyException \ | ||||
|         format:msg \ | ||||
|     ]; \ | ||||
| } | ||||
|  | ||||
| @interface FLEXProtocolBuilder () | ||||
| @property (nonatomic) Protocol *workingProtocol; | ||||
| @property (nonatomic) NSString *name; | ||||
| @end | ||||
|  | ||||
| @implementation FLEXProtocolBuilder | ||||
|  | ||||
| - (id)init { | ||||
|     [NSException | ||||
|         raise:NSInternalInconsistencyException | ||||
|         format:@"Class instance should not be created with -init" | ||||
|     ]; | ||||
|     return nil; | ||||
| } | ||||
|  | ||||
| #pragma mark Initializers | ||||
| + (instancetype)allocateProtocol:(NSString *)name { | ||||
|     NSParameterAssert(name); | ||||
|     return [[self alloc] initWithProtocol:objc_allocateProtocol(name.UTF8String)]; | ||||
|      | ||||
| } | ||||
|  | ||||
| - (id)initWithProtocol:(Protocol *)protocol { | ||||
|     NSParameterAssert(protocol); | ||||
|      | ||||
|     self = [super init]; | ||||
|     if (self) { | ||||
|         _workingProtocol = protocol; | ||||
|         _name = NSStringFromProtocol(self.workingProtocol); | ||||
|     } | ||||
|      | ||||
|     return self; | ||||
| } | ||||
|  | ||||
| - (NSString *)description { | ||||
|     return [NSString stringWithFormat:@"<%@ name=%@, registered=%d>", | ||||
|             NSStringFromClass(self.class), self.name, self.isRegistered]; | ||||
| } | ||||
|  | ||||
| #pragma mark Building | ||||
|  | ||||
| - (void)addProperty:(FLEXProperty *)property isRequired:(BOOL)isRequired { | ||||
|     MutationAssertion(@"Properties cannot be added once a protocol has been registered"); | ||||
|  | ||||
|     unsigned int count; | ||||
|     objc_property_attribute_t *attributes = [property copyAttributesList:&count]; | ||||
|     protocol_addProperty(self.workingProtocol, property.name.UTF8String, attributes, count, isRequired, YES); | ||||
|     free(attributes); | ||||
| } | ||||
|  | ||||
| - (void)addMethod:(SEL)selector | ||||
|     typeEncoding:(NSString *)typeEncoding | ||||
|        isRequired:(BOOL)isRequired | ||||
|  isInstanceMethod:(BOOL)isInstanceMethod { | ||||
|     MutationAssertion(@"Methods cannot be added once a protocol has been registered"); | ||||
|     protocol_addMethodDescription(self.workingProtocol, selector, typeEncoding.UTF8String, isRequired, isInstanceMethod); | ||||
| } | ||||
|  | ||||
| - (void)addProtocol:(Protocol *)protocol { | ||||
|     MutationAssertion(@"Protocols cannot be added once a protocol has been registered"); | ||||
|     protocol_addProtocol(self.workingProtocol, protocol); | ||||
| } | ||||
|  | ||||
| - (FLEXProtocol *)registerProtocol { | ||||
|     MutationAssertion(@"Protocol is already registered"); | ||||
|      | ||||
|     _isRegistered = YES; | ||||
|     objc_registerProtocol(self.workingProtocol); | ||||
|     return [FLEXProtocol protocol:self.workingProtocol]; | ||||
| } | ||||
|  | ||||
| @end | ||||
		Reference in New Issue
	
	Block a user
	 Balackburn
					Balackburn