24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
*
* @brief A class for storing arbitrary values in an object.
*/
@interface OFValue: OFObject
/*!
* @brief The ObjC type encoding of the value.
*/
@property (nonatomic, readonly) const char *objCType;
@property (readonly, nonatomic) const char *objCType;
/*!
* @brief The value as a pointer to void.
*
* If the value is not pointer-sized, @ref OFInvalidFormatException is thrown.
*/
@property (readonly, nonatomic) void *pointerValue;
/*!
* @brief The value as a non-retained object.
*
* If the value is not pointer-sized, @ref OFInvalidFormatException is thrown.
*/
@property (readonly, nonatomic) id nonretainedObjectValue;
/*!
* @brief Creates a new, autorelease OFValue with the specified bytes of the
* specified type.
*
* @param bytes The bytes containing the value
* @param objCType The ObjC type encoding for the value
* @return A new, autoreleased OFValue
*/
+ (instancetype)valueWithBytes: (const void *)bytes
objCType: (const char *)objCType;
/*!
* @brief Creates a new, autoreleased OFValue containing the specified pointer.
*
* Only the raw value of the pointer is stored and no data will be copied.
*
* @param pointer The pointer the OFValue should contain
* @return A new, autoreleased OFValue
*/
+ (instancetype)valueWithPointer: (const void *)pointer;
/*!
* @brief Creates a new, autoreleased OFValue containing the specified
* non-retained object.
*
* The object is not retained, which makes this useful for storing objects in
* collections without retaining them.
*
* @param object The object the OFValue should contain without retaining it
* @return A new, autoreleased OFValue
*/
+ (instancetype)valueWithNonretainedObject: (id)object;
/*!
* @brief Initializes an already allocated OFValue with the specified bytes of
* the specified type.
*
* @param bytes The bytes containing the value
* @param objCType The ObjC type encoding for the value
* @return An initialized OFValue
*/
- (instancetype)initWithBytes: (const void *)bytes
objCType: (const char *)objCType;
/*!
* @brief Initializes an already allocated OFValue containing the specified
* pointer.
*
* Only the raw value of the pointer is stored and no data will be copied.
*
* @param pointer The pointer the OFValue should contain
* @return An initialized OFValue
*/
- (instancetype)initWithPointer: (const void *)pointer;
/*!
* @brief Initializes an already allocated OFValue containing the specified
* non-retained object.
*
* The object is not retained, which makes this useful for storing objects in
* collections without retaining them.
*
* @param object The object the OFValue should contain without retaining it
* @return An initialized OFValue
*/
- (instancetype)initWithNonretainedObject: (id)object;
/*!
* @brief Gets the value.
*
* If the specified size does not match, this raises an
* @ref OFOutOfRangeException.
*
* @param value The buffer to copy the value into
|