ObjFW  Diff

Differences From Artifact [7ea4c5f34b]:

To Artifact [6467769256]:


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
121

122

123
124

125

126
127

128

129
130

131

132
133

134

135
136

137

138
139

140

141
142

143

144
145
146
147
148
149


150
151

152
153
154

155
156
157

158
159
160

161
162
163

164
165
166

167
168
169

170
171
172

173
174
175

176
177
178

179
180
181

182
183
184

185
186
187

188
189
190

191
192
193

194
195
196

197
198
199

200
201
202

203
204
205

206
207
208

209
210
211

212
213
214

215
216
217

218
219
220

221
222
223
224
225
226
227
228
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

121
122

123

124
125

126

127
128

129

130
131

132

133
134

135

136
137

138

139
140

141

142
143

144

145
146
147


148
149
150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198
199
200
201
202
203
204







-
-
+
+

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-

+
-
+
-



-
-
+
+

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-

-
+
-







	case OF_NUMBER_FLOAT:						\
		return (t)value.float_;					\
	case OF_NUMBER_DOUBLE:						\
		return (t)value.double_;				\
	default:							\
		@throw [OFInvalidFormatException newWithClass: isa];	\
	}
#define CALCULATE(o)							\
	switch (type) {							\
#define CALCULATE(o, n)							\
	switch (type) { 						\
	case OF_NUMBER_CHAR:						\
		return [OFNumber numberWithChar:			\
		value.char_ o;						\
		    value.char_ o [n asChar]];				\
		break;							\
	case OF_NUMBER_SHORT:						\
		return [OFNumber numberWithShort:			\
		value.short_ o;						\
		    value.short_ o [n asShort]];			\
		break;							\
	case OF_NUMBER_INT:						\
		return [OFNumber numberWithInt:				\
		value.int_ o;						\
		    value.int_ o [n asInt]];				\
		break;							\
	case OF_NUMBER_LONG:						\
		return [OFNumber numberWithLong:			\
		value.long_ o;						\
		    value.long_ o [n asLong]];				\
		break;							\
	case OF_NUMBER_UCHAR:						\
		return [OFNumber numberWithUChar:			\
		value.uchar o;						\
		    value.uchar o [n asUChar]];				\
		break;							\
	case OF_NUMBER_USHORT:						\
		return [OFNumber numberWithUShort:			\
		value.ushort o;						\
		    value.ushort o [n asUShort]];			\
		break;							\
	case OF_NUMBER_UINT:						\
		return [OFNumber numberWithUInt:			\
		value.uint o;						\
		    value.uint o [n asUInt]];				\
		break;							\
	case OF_NUMBER_ULONG:						\
		return [OFNumber numberWithULong:			\
		value.ulong o;						\
		    value.ulong o [n asULong]];				\
		break;							\
	case OF_NUMBER_INT8:						\
		return [OFNumber numberWithInt8:			\
		value.int8 o;						\
		    value.int8 o [n asInt8]];				\
		break;							\
	case OF_NUMBER_INT16:						\
		return [OFNumber numberWithInt16:			\
		value.int16 o;						\
		    value.int16 o [n asInt16]];				\
		break;							\
	case OF_NUMBER_INT32:						\
		return [OFNumber numberWithInt32:			\
		value.int32 o;						\
		    value.int32 o [n asInt32]];				\
		break;							\
	case OF_NUMBER_INT64:						\
		return [OFNumber numberWithInt64:			\
		value.int64 o;						\
		    value.int64 o [n asInt64]];				\
		break;							\
	case OF_NUMBER_UINT8:						\
		return [OFNumber numberWithUInt8:			\
		value.uint8 o;						\
		    value.uint8 o [n asUInt8]];				\
		break;							\
	case OF_NUMBER_UINT16:						\
		return [OFNumber numberWithUInt16:			\
		value.uint16 o;						\
		    value.uint16 o [n asUInt16]];			\
		break;							\
	case OF_NUMBER_UINT32:						\
		return [OFNumber numberWithUInt32:			\
		value.uint32 o;						\
		    value.uint32 o [n asUInt32]];			\
		break;							\
	case OF_NUMBER_UINT64:						\
		return [OFNumber numberWithUInt64:			\
		value.uint64 o;						\
		    value.uint64 o [n asUInt64]];			\
		break;							\
	case OF_NUMBER_SIZE:						\
		return [OFNumber numberWithSize:			\
		value.size o;						\
		    value.size o [n asSize]];				\
		break;							\
	case OF_NUMBER_SSIZE:						\
		return [OFNumber numberWithSSize:			\
		value.ssize o;						\
		    value.ssize o [n asSSize]];				\
		break;							\
	case OF_NUMBER_INTMAX:						\
		return [OFNumber numberWithIntMax:			\
		value.intmax o;						\
		    value.intmax o [n asIntMax]];			\
		break;							\
	case OF_NUMBER_UINTMAX:						\
		return [OFNumber numberWithUIntMax:			\
		value.uintmax o;					\
		    value.uintmax o [n asUIntMax]];			\
		break;							\
	case OF_NUMBER_PTRDIFF:						\
		return [OFNumber numberWithPtrDiff:			\
		value.ptrdiff o;					\
		    value.ptrdiff o [n asPtrDiff]];			\
		break;							\
	case OF_NUMBER_INTPTR:						\
		return [OFNumber numberWithIntPtr:			\
		value.intptr o;						\
		    value.intptr o [n asIntPtr]];			\
		break;							\
	case OF_NUMBER_FLOAT:						\
		return [OFNumber numberWithFloat:			\
		value.float_ o;						\
		    value.float_ o [n asFloat]];			\
		break;							\
	case OF_NUMBER_DOUBLE:						\
		return [OFNumber numberWithDouble:			\
		value.double_ o;					\
		    value.double_ o [n asDouble]];			\
		break;							\
	default:							\
		@throw [OFInvalidFormatException newWithClass: isa];	\
	}
#define CALCULATE2(o, n)						\
	switch (type) { 						\
#define CALCULATE2(o)							\
	switch (type) {							\
	case OF_NUMBER_CHAR:						\
		value.char_ o [n asChar];				\
		return [OFNumber numberWithChar: value.char_ o];	\
		break;							\
	case OF_NUMBER_SHORT:						\
		value.short_ o [n asShort];				\
		return [OFNumber numberWithShort: value.short_ o];	\
		break;							\
	case OF_NUMBER_INT:						\
		value.int_ o [n asInt];					\
		return [OFNumber numberWithInt: value.int_ o];		\
		break;							\
	case OF_NUMBER_LONG:						\
		value.long_ o [n asLong];				\
		return [OFNumber numberWithLong: value.long_ o];	\
		break;							\
	case OF_NUMBER_UCHAR:						\
		value.uchar o [n asUChar];				\
		return [OFNumber numberWithUChar: value.uchar o];	\
		break;							\
	case OF_NUMBER_USHORT:						\
		value.ushort o [n asUShort];				\
		return [OFNumber numberWithUShort: value.ushort o];	\
		break;							\
	case OF_NUMBER_UINT:						\
		value.uint o [n asUInt];				\
		return [OFNumber numberWithUInt: value.uint o];		\
		break;							\
	case OF_NUMBER_ULONG:						\
		value.ulong o [n asULong];				\
		return [OFNumber numberWithULong: value.ulong o];	\
		break;							\
	case OF_NUMBER_INT8:						\
		value.int8 o [n asInt8];				\
		return [OFNumber numberWithInt8: value.int8 o];		\
		break;							\
	case OF_NUMBER_INT16:						\
		value.int16 o [n asInt16];				\
		return [OFNumber numberWithInt16: value.int16 o];	\
		break;							\
	case OF_NUMBER_INT32:						\
		value.int32 o [n asInt32];				\
		return [OFNumber numberWithInt32: value.int32 o];	\
		break;							\
	case OF_NUMBER_INT64:						\
		value.int64 o [n asInt64];				\
		return [OFNumber numberWithInt64: value.int64 o];	\
		break;							\
	case OF_NUMBER_UINT8:						\
		value.uint8 o [n asUInt8];				\
		return [OFNumber numberWithUInt8: value.uint8 o];	\
		break;							\
	case OF_NUMBER_UINT16:						\
		value.uint16 o [n asUInt16];				\
		return [OFNumber numberWithUInt16: value.uint16 o];	\
		break;							\
	case OF_NUMBER_UINT32:						\
		value.uint32 o [n asUInt32];				\
		return [OFNumber numberWithUInt32: value.uint32 o];	\
		break;							\
	case OF_NUMBER_UINT64:						\
		value.uint64 o [n asUInt64];				\
		return [OFNumber numberWithUInt64: value.uint64 o];	\
		break;							\
	case OF_NUMBER_SIZE:						\
		value.size o [n asSize];				\
		return [OFNumber numberWithSize: value.size o];		\
		break;							\
	case OF_NUMBER_SSIZE:						\
		value.ssize o [n asSSize];				\
		return [OFNumber numberWithSSize: value.ssize o];	\
		break;							\
	case OF_NUMBER_INTMAX:						\
		value.intmax o [n asIntMax];				\
		return [OFNumber numberWithIntMax: value.intmax o];	\
		break;							\
	case OF_NUMBER_UINTMAX:						\
		value.uintmax o [n asUIntMax];				\
		return [OFNumber numberWithUIntMax: value.uintmax o];	\
		break;							\
	case OF_NUMBER_PTRDIFF:						\
		value.ptrdiff o [n asPtrDiff];				\
		return [OFNumber numberWithPtrDiff: value.ptrdiff o];	\
		break;							\
	case OF_NUMBER_INTPTR:						\
		value.intptr o [n asIntPtr];				\
		return [OFNumber numberWithIntPtr: value.intptr o];	\
		break;							\
	case OF_NUMBER_FLOAT:						\
		value.float_ o [n asFloat];				\
		return [OFNumber numberWithFloat: value.float_ o];	\
		break;							\
	case OF_NUMBER_DOUBLE:						\
		value.double_ o [n asDouble];				\
		return [OFNumber numberWithDouble: value.double_ o];	\
		break;							\
	default:							\
		@throw [OFInvalidFormatException newWithClass: isa];	\
	}

@implementation OFNumber
+ numberWithChar: (char)char_
{
780
781
782
783
784
785
786
787

788
789
790
791
792
793

794
795
796
797
798
799

800
801
802
803
804
805

806
807
808
809
810
811

812
813
814
815
816
817

818
819
820
756
757
758
759
760
761
762

763

764
765
766
767

768

769
770
771
772

773

774
775
776
777

778

779
780
781
782

783

784
785
786
787

788

789
790







-
+
-




-
+
-




-
+
-




-
+
-




-
+
-




-
+
-


	default:
		return [self asUInt32];
	}
}

- add: (OFNumber*)num
{
	CALCULATE2(+=, num)
	CALCULATE(+, num)
	return self;
}

- subtract: (OFNumber*)num
{
	CALCULATE2(-=, num)
	CALCULATE(-, num)
	return self;
}

- multiplyWith: (OFNumber*)num
{
	CALCULATE2(*=, num)
	CALCULATE(*, num)
	return self;
}

- divideBy: (OFNumber*)num
{
	CALCULATE2(/=, num)
	CALCULATE(/, num)
	return self;
}

- increase
{
	CALCULATE(++)
	CALCULATE2(+ 1)
	return self;
}

- decrease
{
	CALCULATE(--)
	CALCULATE2(- 1)
	return self;
}
@end