Index: src/OFNumber.h ================================================================== --- src/OFNumber.h +++ src/OFNumber.h @@ -810,120 +810,11 @@ * @brief Returns the OFNumber as a double. * * @return The OFNumber as a double */ - (double)doubleValue; - -/*! - * @brief Creates a new OFNumber by adding the specified number. - * - * @param num The OFNumber to add - * @return A new autoreleased OFNumber added with the specified OFNumber - */ -- (OFNumber*)numberByAddingNumber: (OFNumber*)num; - -/*! - * @brief Creates a new OFNumber by subtracting the specified number. - * - * @param num The OFNumber to substract - * @return A new autoreleased OFNumber subtracted by the specified OFNumber - */ -- (OFNumber*)numberBySubtractingNumber: (OFNumber*)num; - -/*! - * @brief Creates a new OFNumber by multiplying with the specified number. - * - * @param num The OFNumber to multiply with - * @return A new autoreleased OFNumber multiplied with the specified OFNumber - */ -- (OFNumber*)numberByMultiplyingWithNumber: (OFNumber*)num; - -/*! - * @brief Creates a new OFNumber by dividing with with the specified number. - * - * @param num The OFNumber to divide by - * @return A new autoreleased OFNumber devided by the specified OFNumber - */ -- (OFNumber*)numberByDividingWithNumber: (OFNumber*)num; - -/*! - * @brief Creates a new OFNumber by ANDing with the specified number. - * - * Does not work with floating point types! - * - * @param num The number to AND with. - * @return A new autoreleased OFNumber ANDed with the specified OFNumber - */ -- (OFNumber*)numberByANDingWithNumber: (OFNumber*)num; - -/*! - * @brief Creates a new OFNumber by ORing with the specified number. - * - * Does not work with floating point types! - * - * @param num The number to OR with. - * @return A new autoreleased OFNumber ORed with the specified OFNumber - */ -- (OFNumber*)numberByORingWithNumber: (OFNumber*)num; - -/*! - * @brief Creates a new OFNumber by XORing with the specified number. - * - * Does not work with floating point types! - * - * @param num The number to XOR with. - * @return A new autoreleased OFNumber XORed with the specified OFNumber - */ -- (OFNumber*)numberByXORingWithNumber: (OFNumber*)num; - -/*! - * @brief Creates a new OFNumber by shifting to the left by the specified number - * of bits. - * - * Does not work with floating point types! - * - * @param num The number of bits to shift to the left - * @return A new autoreleased OFNumber bitshifted to the left with the - * specified OFNumber - */ -- (OFNumber*)numberByShiftingLeftWithNumber: (OFNumber*)num; - -/*! - * @brief Creates a new OFNumber by shifting to the right by the specified - * number of bits. - * - * Does not work with floating point types! - * - * @param num The number of bits to shift to the right - * @return A new autoreleased OFNumber bitshifted to the right with the - * specified OFNumber - */ -- (OFNumber*)numberByShiftingRightWithNumber: (OFNumber*)num; - -/*! - * @brief Creates a new OFNumber by with the same value increased by one. - * - * @return A new autoreleased OFNumber with the value increased by one. - */ -- (OFNumber*)numberByIncreasing; - -/*! - * @brief Creates a new OFNumber by with the same value decreased by one. - * - * @return A new autoreleased OFNumber with the value decreased by one. - */ -- (OFNumber*)numberByDecreasing; - -/*! - * @brief Creates a new OFNumber with the remainder of a division with the - * specified number. - * - * @param num The number to divide by - * @return The remainder of a division by the specified number - */ -- (OFNumber*)remainderOfDivisionWithNumber: (OFNumber*)num; @end #ifndef NSINTEGER_DEFINED /* Required for number literals to work */ @compatibility_alias NSNumber OFNumber; #endif Index: src/OFNumber.m ================================================================== --- src/OFNumber.m +++ src/OFNumber.m @@ -87,251 +87,10 @@ case OF_NUMBER_TYPE_DOUBLE: \ return (t)_value.double_; \ default: \ @throw [OFInvalidFormatException exception]; \ } -#define CALCULATE(o, n) \ - switch (_type) { \ - case OF_NUMBER_TYPE_BOOL: \ - return [OFNumber numberWithBool: \ - _value.bool_ o [n boolValue]]; \ - case OF_NUMBER_TYPE_CHAR: \ - return [OFNumber numberWithChar: \ - _value.schar o [n charValue]]; \ - case OF_NUMBER_TYPE_SHORT: \ - return [OFNumber numberWithShort: \ - _value.sshort o [n shortValue]]; \ - case OF_NUMBER_TYPE_INT: \ - return [OFNumber numberWithInt: \ - _value.sint o [n intValue]]; \ - case OF_NUMBER_TYPE_LONG: \ - return [OFNumber numberWithLong: \ - _value.slong o [n longValue]]; \ - case OF_NUMBER_TYPE_LONGLONG: \ - return [OFNumber numberWithLongLong: \ - _value.slonglong o [n longLongValue]]; \ - case OF_NUMBER_TYPE_UCHAR: \ - return [OFNumber numberWithUnsignedChar: \ - _value.uchar o [n unsignedCharValue]]; \ - case OF_NUMBER_TYPE_USHORT: \ - return [OFNumber numberWithUnsignedShort: \ - _value.ushort o [n unsignedShortValue]]; \ - case OF_NUMBER_TYPE_UINT: \ - return [OFNumber numberWithUnsignedInt: \ - _value.uint o [n unsignedIntValue]]; \ - case OF_NUMBER_TYPE_ULONG: \ - return [OFNumber numberWithUnsignedLong: \ - _value.ulong o [n unsignedLongValue]]; \ - case OF_NUMBER_TYPE_ULONGLONG: \ - return [OFNumber numberWithUnsignedLongLong: \ - _value.ulonglong o [n unsignedLongLongValue]]; \ - case OF_NUMBER_TYPE_INT8: \ - return [OFNumber numberWithInt8: \ - _value.int8 o [n int8Value]]; \ - case OF_NUMBER_TYPE_INT16: \ - return [OFNumber numberWithInt16: \ - _value.int16 o [n int16Value]]; \ - case OF_NUMBER_TYPE_INT32: \ - return [OFNumber numberWithInt32: \ - _value.int32 o [n int32Value]]; \ - case OF_NUMBER_TYPE_INT64: \ - return [OFNumber numberWithInt64: \ - _value.int64 o [n int64Value]]; \ - case OF_NUMBER_TYPE_UINT8: \ - return [OFNumber numberWithUInt8: \ - _value.uint8 o [n uInt8Value]]; \ - case OF_NUMBER_TYPE_UINT16: \ - return [OFNumber numberWithUInt16: \ - _value.uint16 o [n uInt16Value]]; \ - case OF_NUMBER_TYPE_UINT32: \ - return [OFNumber numberWithUInt32: \ - _value.uint32 o [n uInt32Value]]; \ - case OF_NUMBER_TYPE_UINT64: \ - return [OFNumber numberWithUInt64: \ - _value.uint64 o [n uInt64Value]]; \ - case OF_NUMBER_TYPE_SIZE: \ - return [OFNumber numberWithSize: \ - _value.size o [n sizeValue]]; \ - case OF_NUMBER_TYPE_SSIZE: \ - return [OFNumber numberWithSSize: \ - _value.ssize o [n sSizeValue]]; \ - case OF_NUMBER_TYPE_INTMAX: \ - return [OFNumber numberWithIntMax: \ - _value.intmax o [n intMaxValue]]; \ - case OF_NUMBER_TYPE_UINTMAX: \ - return [OFNumber numberWithUIntMax: \ - _value.uintmax o [n uIntMaxValue]]; \ - case OF_NUMBER_TYPE_PTRDIFF: \ - return [OFNumber numberWithPtrDiff: \ - _value.ptrdiff o [n ptrDiffValue]]; \ - case OF_NUMBER_TYPE_INTPTR: \ - return [OFNumber numberWithIntPtr: \ - _value.intptr o [n intPtrValue]]; \ - case OF_NUMBER_TYPE_UINTPTR: \ - return [OFNumber numberWithUIntPtr: \ - _value.uintptr o [n uIntPtrValue]]; \ - case OF_NUMBER_TYPE_FLOAT: \ - return [OFNumber numberWithFloat: \ - _value.float_ o [n floatValue]]; \ - case OF_NUMBER_TYPE_DOUBLE: \ - return [OFNumber numberWithDouble: \ - _value.double_ o [n doubleValue]]; \ - default: \ - @throw [OFInvalidFormatException exception]; \ - } -#define CALCULATE2(o, n) \ - switch (_type) { \ - case OF_NUMBER_TYPE_BOOL: \ - return [OFNumber numberWithBool: \ - _value.bool_ o [n boolValue]]; \ - case OF_NUMBER_TYPE_CHAR: \ - return [OFNumber numberWithChar: \ - _value.schar o [n charValue]]; \ - case OF_NUMBER_TYPE_SHORT: \ - return [OFNumber numberWithShort: \ - _value.sshort o [n shortValue]]; \ - case OF_NUMBER_TYPE_INT: \ - return [OFNumber numberWithInt: \ - _value.sint o [n intValue]]; \ - case OF_NUMBER_TYPE_LONG: \ - return [OFNumber numberWithLong: \ - _value.slong o [n longValue]]; \ - case OF_NUMBER_TYPE_LONGLONG: \ - return [OFNumber numberWithLongLong: \ - _value.slonglong o [n longLongValue]]; \ - case OF_NUMBER_TYPE_UCHAR: \ - return [OFNumber numberWithUnsignedChar: \ - _value.uchar o [n unsignedCharValue]]; \ - case OF_NUMBER_TYPE_USHORT: \ - return [OFNumber numberWithUnsignedShort: \ - _value.ushort o [n unsignedShortValue]]; \ - case OF_NUMBER_TYPE_UINT: \ - return [OFNumber numberWithUnsignedInt: \ - _value.uint o [n unsignedIntValue]]; \ - case OF_NUMBER_TYPE_ULONG: \ - return [OFNumber numberWithUnsignedLong: \ - _value.ulong o [n unsignedLongValue]]; \ - case OF_NUMBER_TYPE_ULONGLONG: \ - return [OFNumber numberWithUnsignedLongLong: \ - _value.ulonglong o [n unsignedLongLongValue]]; \ - case OF_NUMBER_TYPE_INT8: \ - return [OFNumber numberWithInt8: \ - _value.int8 o [n int8Value]]; \ - case OF_NUMBER_TYPE_INT16: \ - return [OFNumber numberWithInt16: \ - _value.int16 o [n int16Value]]; \ - case OF_NUMBER_TYPE_INT32: \ - return [OFNumber numberWithInt32: \ - _value.int32 o [n int32Value]]; \ - case OF_NUMBER_TYPE_INT64: \ - return [OFNumber numberWithInt64: \ - _value.int64 o [n int64Value]]; \ - case OF_NUMBER_TYPE_UINT8: \ - return [OFNumber numberWithUInt8: \ - _value.uint8 o [n uInt8Value]]; \ - case OF_NUMBER_TYPE_UINT16: \ - return [OFNumber numberWithUInt16: \ - _value.uint16 o [n uInt16Value]]; \ - case OF_NUMBER_TYPE_UINT32: \ - return [OFNumber numberWithUInt32: \ - _value.uint32 o [n uInt32Value]]; \ - case OF_NUMBER_TYPE_UINT64: \ - return [OFNumber numberWithUInt64: \ - _value.uint64 o [n uInt64Value]]; \ - case OF_NUMBER_TYPE_SIZE: \ - return [OFNumber numberWithSize: \ - _value.size o [n sizeValue]]; \ - case OF_NUMBER_TYPE_SSIZE: \ - return [OFNumber numberWithSSize: \ - _value.ssize o [n sSizeValue]]; \ - case OF_NUMBER_TYPE_INTMAX: \ - return [OFNumber numberWithIntMax: \ - _value.intmax o [n intMaxValue]]; \ - case OF_NUMBER_TYPE_UINTMAX: \ - return [OFNumber numberWithUIntMax: \ - _value.uintmax o [n uIntMaxValue]]; \ - case OF_NUMBER_TYPE_PTRDIFF: \ - return [OFNumber numberWithPtrDiff: \ - _value.ptrdiff o [n ptrDiffValue]]; \ - case OF_NUMBER_TYPE_INTPTR: \ - return [OFNumber numberWithIntPtr: \ - _value.intptr o [n intPtrValue]]; \ - case OF_NUMBER_TYPE_UINTPTR: \ - return [OFNumber numberWithUIntPtr: \ - _value.uintptr o [n uIntPtrValue]]; \ - case OF_NUMBER_TYPE_FLOAT: \ - case OF_NUMBER_TYPE_DOUBLE: \ - @throw [OFInvalidArgumentException exception]; \ - default: \ - @throw [OFInvalidFormatException exception]; \ - } -#define CALCULATE3(o) \ - switch (_type) { \ - case OF_NUMBER_TYPE_BOOL: \ - return [OFNumber numberWithBool: _value.bool_ o]; \ - case OF_NUMBER_TYPE_CHAR: \ - return [OFNumber numberWithChar: _value.schar o]; \ - case OF_NUMBER_TYPE_SHORT: \ - return [OFNumber numberWithShort: _value.sshort o]; \ - case OF_NUMBER_TYPE_INT: \ - return [OFNumber numberWithInt: _value.sint o]; \ - case OF_NUMBER_TYPE_LONG: \ - return [OFNumber numberWithLong: _value.slong o]; \ - case OF_NUMBER_TYPE_LONGLONG: \ - return [OFNumber numberWithLongLong: \ - _value.slonglong o]; \ - case OF_NUMBER_TYPE_UCHAR: \ - return [OFNumber numberWithUnsignedChar: \ - _value.uchar o]; \ - case OF_NUMBER_TYPE_USHORT: \ - return [OFNumber numberWithUnsignedShort: \ - _value.ushort o]; \ - case OF_NUMBER_TYPE_UINT: \ - return [OFNumber numberWithUnsignedInt: _value.uint o]; \ - case OF_NUMBER_TYPE_ULONG: \ - return [OFNumber numberWithUnsignedLong: \ - _value.ulong o]; \ - case OF_NUMBER_TYPE_ULONGLONG: \ - return [OFNumber numberWithUnsignedLongLong: \ - _value.ulonglong o]; \ - case OF_NUMBER_TYPE_INT8: \ - return [OFNumber numberWithInt8: _value.int8 o]; \ - case OF_NUMBER_TYPE_INT16: \ - return [OFNumber numberWithInt16: _value.int16 o]; \ - case OF_NUMBER_TYPE_INT32: \ - return [OFNumber numberWithInt32: _value.int32 o]; \ - case OF_NUMBER_TYPE_INT64: \ - return [OFNumber numberWithInt64: _value.int64 o]; \ - case OF_NUMBER_TYPE_UINT8: \ - return [OFNumber numberWithUInt8: _value.uint8 o]; \ - case OF_NUMBER_TYPE_UINT16: \ - return [OFNumber numberWithUInt16: _value.uint16 o]; \ - case OF_NUMBER_TYPE_UINT32: \ - return [OFNumber numberWithUInt32: _value.uint32 o]; \ - case OF_NUMBER_TYPE_UINT64: \ - return [OFNumber numberWithUInt64: _value.uint64 o]; \ - case OF_NUMBER_TYPE_SIZE: \ - return [OFNumber numberWithSize: _value.size o]; \ - case OF_NUMBER_TYPE_SSIZE: \ - return [OFNumber numberWithSSize: _value.ssize o]; \ - case OF_NUMBER_TYPE_INTMAX: \ - return [OFNumber numberWithIntMax: _value.intmax o]; \ - case OF_NUMBER_TYPE_UINTMAX: \ - return [OFNumber numberWithUIntMax: _value.uintmax o]; \ - case OF_NUMBER_TYPE_PTRDIFF: \ - return [OFNumber numberWithPtrDiff: _value.ptrdiff o]; \ - case OF_NUMBER_TYPE_INTPTR: \ - return [OFNumber numberWithIntPtr: _value.intptr o]; \ - case OF_NUMBER_TYPE_UINTPTR: \ - return [OFNumber numberWithUIntPtr: _value.uintptr o]; \ - case OF_NUMBER_TYPE_FLOAT: \ - return [OFNumber numberWithFloat: _value.float_ o]; \ - case OF_NUMBER_TYPE_DOUBLE: \ - return [OFNumber numberWithDouble: _value.double_ o]; \ - default: \ - @throw [OFInvalidFormatException exception]; \ - } @interface OFNumber (OF_PRIVATE_CATEGORY) - (OFString*)OF_JSONRepresentationWithOptions: (int)options depth: (size_t)depth; @end @@ -1106,157 +865,10 @@ OF_HASH_FINALIZE(hash); return hash; } -- (OFNumber*)numberByAddingNumber: (OFNumber*)num -{ - CALCULATE(+, num) -} - -- (OFNumber*)numberBySubtractingNumber: (OFNumber*)num -{ - CALCULATE(-, num) -} - -- (OFNumber*)numberByMultiplyingWithNumber: (OFNumber*)num -{ - CALCULATE(*, num) -} - -- (OFNumber*)numberByDividingWithNumber: (OFNumber*)num -{ - CALCULATE(/, num) -} - -- (OFNumber*)numberByANDingWithNumber: (OFNumber*)num -{ - CALCULATE2(&, num) -} - -- (OFNumber*)numberByORingWithNumber: (OFNumber*)num -{ - CALCULATE2(|, num) -} - -- (OFNumber*)numberByXORingWithNumber: (OFNumber*)num -{ - CALCULATE2(^, num) -} - -- (OFNumber*)numberByShiftingLeftWithNumber: (OFNumber*)num -{ - CALCULATE2(<<, num) -} - -- (OFNumber*)numberByShiftingRightWithNumber: (OFNumber*)num -{ - CALCULATE2(>>, num) -} - -- (OFNumber*)numberByIncreasing -{ - CALCULATE3(+ 1) -} - -- (OFNumber*)numberByDecreasing -{ - CALCULATE3(- 1) -} - -- (OFNumber*)remainderOfDivisionWithNumber: (OFNumber*)number -{ - switch (_type) { - case OF_NUMBER_TYPE_BOOL: - return [OFNumber numberWithBool: - _value.bool_ % [number boolValue]]; - case OF_NUMBER_TYPE_CHAR: - return [OFNumber numberWithChar: - _value.schar % [number charValue]]; - case OF_NUMBER_TYPE_SHORT: - return [OFNumber numberWithShort: - _value.sshort % [number shortValue]]; - case OF_NUMBER_TYPE_INT: - return [OFNumber numberWithInt: - _value.sint % [number intValue]]; - case OF_NUMBER_TYPE_LONG: - return [OFNumber numberWithLong: - _value.slong % [number longValue]]; - case OF_NUMBER_TYPE_LONGLONG: - return [OFNumber numberWithLongLong: - _value.slonglong % [number longLongValue]]; - case OF_NUMBER_TYPE_UCHAR: - return [OFNumber numberWithUnsignedChar: - _value.uchar % [number unsignedCharValue]]; - case OF_NUMBER_TYPE_USHORT: - return [OFNumber numberWithUnsignedShort: - _value.ushort % [number unsignedShortValue]]; - case OF_NUMBER_TYPE_UINT: - return [OFNumber numberWithUnsignedInt: - _value.uint % [number unsignedIntValue]]; - case OF_NUMBER_TYPE_ULONG: - return [OFNumber numberWithUnsignedLong: - _value.ulong % [number unsignedLongValue]]; - case OF_NUMBER_TYPE_ULONGLONG: - return [OFNumber numberWithUnsignedLongLong: - _value.ulonglong % [number unsignedLongLongValue]]; - case OF_NUMBER_TYPE_INT8: - return [OFNumber numberWithInt8: - _value.int8 % [number int8Value]]; - case OF_NUMBER_TYPE_INT16: - return [OFNumber numberWithInt16: - _value.int16 % [number int16Value]]; - case OF_NUMBER_TYPE_INT32: - return [OFNumber numberWithInt32: - _value.int32 % [number int32Value]]; - case OF_NUMBER_TYPE_INT64: - return [OFNumber numberWithInt64: - _value.int64 % [number int64Value]]; - case OF_NUMBER_TYPE_UINT8: - return [OFNumber numberWithUInt8: - _value.uint8 % [number uInt8Value]]; - case OF_NUMBER_TYPE_UINT16: - return [OFNumber numberWithUInt16: - _value.uint16 % [number uInt16Value]]; - case OF_NUMBER_TYPE_UINT32: - return [OFNumber numberWithUInt32: - _value.uint32 % [number uInt32Value]]; - case OF_NUMBER_TYPE_UINT64: - return [OFNumber numberWithUInt64: - _value.uint64 % [number uInt64Value]]; - case OF_NUMBER_TYPE_SIZE: - return [OFNumber numberWithSize: - _value.size % [number sizeValue]]; - case OF_NUMBER_TYPE_SSIZE: - return [OFNumber numberWithSSize: - _value.ssize % [number sSizeValue]]; - case OF_NUMBER_TYPE_INTMAX: - return [OFNumber numberWithIntMax: - _value.intmax % [number intMaxValue]]; - case OF_NUMBER_TYPE_UINTMAX: - return [OFNumber numberWithUIntMax: - _value.uintmax % [number uIntMaxValue]]; - case OF_NUMBER_TYPE_PTRDIFF: - return [OFNumber numberWithPtrDiff: - _value.ptrdiff % [number ptrDiffValue]]; - case OF_NUMBER_TYPE_INTPTR: - return [OFNumber numberWithIntPtr: - _value.intptr % [number intPtrValue]]; - case OF_NUMBER_TYPE_UINTPTR: - return [OFNumber numberWithUIntPtr: - _value.uintptr % [number uIntPtrValue]]; - case OF_NUMBER_TYPE_FLOAT: - return [OFNumber numberWithFloat: - fmodf(_value.float_, [number floatValue])]; - case OF_NUMBER_TYPE_DOUBLE: - return [OFNumber numberWithDouble: - fmod(_value.double_, [number doubleValue])]; - default: - @throw [OFInvalidFormatException exception]; - } -} - - copy { return [self retain]; } Index: tests/OFNumberTests.m ================================================================== --- tests/OFNumberTests.m +++ tests/OFNumberTests.m @@ -36,30 +36,12 @@ TEST(@"-[isEqual:]", [num isEqual: [OFNumber numberWithUInt32: 123456789]]) TEST(@"-[hash]", [num hash] == 0x82D8BC42) - TEST(@"-[doubleValue]", [num doubleValue] == 123456789.L) - - TEST(@"-[numberByDecreasing]", - [[num numberByDecreasing] - isEqual: [OFNumber numberWithInt32: 123456788]]) - - TEST(@"-[numberByDividingBy:]", - [[num numberByDividingWithNumber: [OFNumber numberWithInt: 2]] - intValue] == 61728394) - - TEST(@"-[numberByXORing:]", - [[num numberByXORingWithNumber: [OFNumber numberWithInt: 123456831]] - intValue] == 42) - - TEST(@"-[numberByShiftingRightBy:]", - [[num numberByShiftingRightWithNumber: [OFNumber numberWithInt: 8]] - intValue] == 482253) - - TEST(@"-[remainderOfDivisionWithNumber:]", - [[num remainderOfDivisionWithNumber: [OFNumber numberWithInt: 11]] - intValue] == 5) + TEST(@"-[charValue]", [num charValue] == 21) + + TEST(@"-[doubleValue]", [num doubleValue] == 123456789.L) [pool drain]; } @end