SFObjCType.h
1 /* 2 * Copyright (c) 2017 Apple Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 #ifndef SECURITY_SFSQL_OBJCTYPE_H 25 #define SECURITY_SFSQL_OBJCTYPE_H 1 26 27 #if __OBJC2__ 28 29 #import <Foundation/Foundation.h> 30 31 typedef NS_ENUM(NSInteger, SFObjCTypeCode) { 32 SFObjCTypeChar = 0, // 'c' 33 SFObjCTypeShort = 1, // 's' 34 SFObjCTypeInt = 2, // 'i' 35 SFObjCTypeLong = 3, // 'l' 36 SFObjCTypeLongLong = 4, // 'q' 37 SFObjCTypeUnsignedChar = 5, // 'C' 38 SFObjCTypeUnsignedShort = 6, // 'S' 39 SFObjCTypeUnsignedInt = 7, // 'I' 40 SFObjCTypeUnsignedLong = 8, // 'L' 41 SFObjCTypeUnsignedLongLong = 9, // 'Q' 42 SFObjCTypeFloat = 10, // 'f' 43 SFObjCTypeDouble = 11, // 'd' 44 SFObjCTypeBool = 12, // 'b' 45 SFObjCTypeVoid = 13, // 'v' 46 SFObjCTypeCharPointer = 14, // '*' 47 SFObjCTypeObject = 15, // '@' 48 SFObjCTypeClass = 16, // '#' 49 SFObjCTypeSelector = 17, // ':' 50 SFObjCTypeArray = 18, // '[' type ']' 51 SFObjCTypeStructure = 19, // '{' name '=' type... '}' 52 SFObjCTypeUnion = 20, // '(' name '=' type... ')' 53 SFObjCTypeBitfield = 21, // 'b' number 54 SFObjCTypePointer = 22, // '^' type 55 SFObjCTypeUnknown = 23, // '?' 56 }; 57 58 typedef NS_ENUM(NSInteger, SFObjCTypeFlag) { 59 SFObjCTypeFlagIntegerNumber = 0x1, 60 SFObjCTypeFlagFloatingPointNumber = 0x2, 61 62 SFObjCTypeFlagNone = 0x0, 63 SFObjCTypeFlagNumberMask = 0x3, 64 }; 65 66 @interface SFObjCType : NSObject { 67 SFObjCTypeCode _code; 68 NSString* _encoding; 69 NSString* _name; 70 NSString* _className; 71 NSUInteger _size; 72 NSUInteger _flags; 73 } 74 75 + (SFObjCType *)typeForEncoding:(const char *)encoding; 76 + (SFObjCType *)typeForValue:(NSValue *)value; 77 78 @property (nonatomic, readonly, assign) SFObjCTypeCode code; 79 @property (nonatomic, readonly, strong) NSString *encoding; 80 @property (nonatomic, readonly, strong) NSString *name; 81 @property (nonatomic, readonly, strong) NSString *className; 82 @property (nonatomic, readonly, assign) NSUInteger size; 83 @property (nonatomic, readonly, assign) NSUInteger flags; 84 85 @property (nonatomic, readonly, assign, getter=isNumber) BOOL number; 86 @property (nonatomic, readonly, assign, getter=isIntegerNumber) BOOL integerNumber; 87 @property (nonatomic, readonly, assign, getter=isFloatingPointNumber) BOOL floatingPointNumber; 88 @property (nonatomic, readonly, assign, getter=isObject) BOOL object; 89 90 - (id)objectWithBytes:(const void *)bytes; 91 - (void)getBytes:(void *)bytes forObject:(id)object; 92 93 @end 94 95 #endif 96 #endif /* SECURITY_SFSQL_OBJCTYPE_H */