]> git.saurik.com Git - apple/security.git/blob - Analytics/SQLite/SFObjCType.h
Security-59306.101.1.tar.gz
[apple/security.git] / Analytics / SQLite / 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 */