/ Analytics / SQLite / SFObjCType.h
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 */