@@ -927,43 +927,17 @@ if (![object isKindOfClass: [OFNumber class]]) return NO; number = object; - switch (type) { - case OF_NUMBER_BOOL: - case OF_NUMBER_CHAR: - case OF_NUMBER_SHORT: - case OF_NUMBER_INT: - case OF_NUMBER_LONG: - case OF_NUMBER_INT8: - case OF_NUMBER_INT16: - case OF_NUMBER_INT32: - case OF_NUMBER_INT64: - case OF_NUMBER_INTMAX: - case OF_NUMBER_PTRDIFF: + if (type & OF_NUMBER_FLOAT || number->type & OF_NUMBER_FLOAT) + return ([number doubleValue] == [self doubleValue]); + + if (type & OF_NUMBER_SIGNED || number->type & OF_NUMBER_SIGNED) return ([number intMaxValue] == [self intMaxValue]); - case OF_NUMBER_SSIZE: - case OF_NUMBER_UCHAR: - case OF_NUMBER_USHORT: - case OF_NUMBER_UINT: - case OF_NUMBER_ULONG: - case OF_NUMBER_UINT8: - case OF_NUMBER_UINT16: - case OF_NUMBER_UINT32: - case OF_NUMBER_UINT64: - case OF_NUMBER_SIZE: - case OF_NUMBER_UINTMAX: - case OF_NUMBER_INTPTR: - case OF_NUMBER_UINTPTR: - return ([number uIntMaxValue] == [self uIntMaxValue]); - case OF_NUMBER_FLOAT: - case OF_NUMBER_DOUBLE: - return ([number doubleValue] == [self doubleValue]); - default: - return NO; - } + + return ([number uIntMaxValue] == [self uIntMaxValue]); } - (uint32_t)hash { uint32_t hash;