2 * Copyright (c) 2017 Apple Inc. All Rights Reserved.
4 * @APPLE_LICENSE_HEADER_START@
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
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.
21 * @APPLE_LICENSE_HEADER_END@
24 #import <Foundation/Foundation.h>
26 typedef NS_ENUM(NSInteger
, SFObjCTypeCode
) {
27 SFObjCTypeChar
= 0, // 'c'
28 SFObjCTypeShort
= 1, // 's'
29 SFObjCTypeInt
= 2, // 'i'
30 SFObjCTypeLong
= 3, // 'l'
31 SFObjCTypeLongLong
= 4, // 'q'
32 SFObjCTypeUnsignedChar
= 5, // 'C'
33 SFObjCTypeUnsignedShort
= 6, // 'S'
34 SFObjCTypeUnsignedInt
= 7, // 'I'
35 SFObjCTypeUnsignedLong
= 8, // 'L'
36 SFObjCTypeUnsignedLongLong
= 9, // 'Q'
37 SFObjCTypeFloat
= 10, // 'f'
38 SFObjCTypeDouble
= 11, // 'd'
39 SFObjCTypeBool
= 12, // 'b'
40 SFObjCTypeVoid
= 13, // 'v'
41 SFObjCTypeCharPointer
= 14, // '*'
42 SFObjCTypeObject
= 15, // '@'
43 SFObjCTypeClass
= 16, // '#'
44 SFObjCTypeSelector
= 17, // ':'
45 SFObjCTypeArray
= 18, // '[' type ']'
46 SFObjCTypeStructure
= 19, // '{' name '=' type... '}'
47 SFObjCTypeUnion
= 20, // '(' name '=' type... ')'
48 SFObjCTypeBitfield
= 21, // 'b' number
49 SFObjCTypePointer
= 22, // '^' type
50 SFObjCTypeUnknown
= 23, // '?'
53 typedef NS_ENUM(NSInteger
, SFObjCTypeFlag
) {
54 SFObjCTypeFlagIntegerNumber
= 0x1,
55 SFObjCTypeFlagFloatingPointNumber
= 0x2,
57 SFObjCTypeFlagNone
= 0x0,
58 SFObjCTypeFlagNumberMask
= 0x3,
61 @interface SFObjCType
: NSObject
{
70 + (SFObjCType
*)typeForEncoding
:(const char *)encoding
;
71 + (SFObjCType
*)typeForValue
:(NSValue
*)value
;
73 @
property (nonatomic
, readonly
, assign
) SFObjCTypeCode code
;
74 @
property (nonatomic
, readonly
, strong
) NSString
*encoding
;
75 @
property (nonatomic
, readonly
, strong
) NSString
*name
;
76 @
property (nonatomic
, readonly
, strong
) NSString
*className
;
77 @
property (nonatomic
, readonly
, assign
) NSUInteger size
;
78 @
property (nonatomic
, readonly
, assign
) NSUInteger flags
;
80 @
property (nonatomic
, readonly
, assign
, getter
=isNumber
) BOOL number
;
81 @
property (nonatomic
, readonly
, assign
, getter
=isIntegerNumber
) BOOL integerNumber
;
82 @
property (nonatomic
, readonly
, assign
, getter
=isFloatingPointNumber
) BOOL floatingPointNumber
;
83 @
property (nonatomic
, readonly
, assign
, getter
=isObject
) BOOL object
;
85 - (id
)objectWithBytes
:(const void *)bytes
;
86 - (void)getBytes
:(void *)bytes forObject
:(id
)object
;