]> git.saurik.com Git - apple/security.git/blob - Analytics/SQLite/SFObjCType.h
Security-58286.41.2.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 #import <Foundation/Foundation.h>
25
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, // '?'
51 };
52
53 typedef NS_ENUM(NSInteger, SFObjCTypeFlag) {
54 SFObjCTypeFlagIntegerNumber = 0x1,
55 SFObjCTypeFlagFloatingPointNumber = 0x2,
56
57 SFObjCTypeFlagNone = 0x0,
58 SFObjCTypeFlagNumberMask = 0x3,
59 };
60
61 @interface SFObjCType : NSObject {
62 SFObjCTypeCode _code;
63 NSString* _encoding;
64 NSString* _name;
65 NSString* _className;
66 NSUInteger _size;
67 NSUInteger _flags;
68 }
69
70 + (SFObjCType *)typeForEncoding:(const char *)encoding;
71 + (SFObjCType *)typeForValue:(NSValue *)value;
72
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;
79
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;
84
85 - (id)objectWithBytes:(const void *)bytes;
86 - (void)getBytes:(void *)bytes forObject:(id)object;
87
88 @end