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