ObjFW  Diff

Differences From Artifact [ffc72bea33]:

To Artifact [109bd47316]:


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
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







-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+

-
-
+
+



-
-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+

-
+
+







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

@implementation OFNumber
+ numberWithChar: (char)char_
{
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
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







-
+
+




-
+
+




-
+
+




-
+
+




-
+
+




-
+
+


	default:
		return [self asUInt32];
	}
}

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

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

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

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

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

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