/* * Copyright (c) 2008 - 2009 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of libobjfw. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include <unistd.h> #import "OFObject.h" enum of_number_type { OF_NUMBER_CHAR, OF_NUMBER_SHORT, OF_NUMBER_INT, OF_NUMBER_LONG, OF_NUMBER_UCHAR, OF_NUMBER_USHORT, OF_NUMBER_UINT, OF_NUMBER_ULONG, OF_NUMBER_INT8, OF_NUMBER_INT16, OF_NUMBER_INT32, OF_NUMBER_INT64, OF_NUMBER_UINT8, OF_NUMBER_UINT16, OF_NUMBER_UINT32, OF_NUMBER_UINT64, OF_NUMBER_SIZE, OF_NUMBER_SSIZE, OF_NUMBER_INTMAX, OF_NUMBER_UINTMAX, OF_NUMBER_PTRDIFF, OF_NUMBER_INTPTR, OF_NUMBER_FLOAT, OF_NUMBER_DOUBLE, }; /** * The OFNumber class provides a way to store a number in an object and * manipulate it. */ @interface OFNumber: OFObject { union { char char_; short short_; int int_; long long_; unsigned char uchar; unsigned short ushort; unsigned int uint; unsigned long ulong; int8_t int8; int16_t int16; int32_t int32; int64_t int64; uint8_t uint8; uint16_t uint16; uint32_t uint32; uint64_t uint64; size_t size; ssize_t ssize; intmax_t intmax; uintmax_t uintmax; ptrdiff_t ptrdiff; intptr_t intptr; float float_; double double_; } value; enum of_number_type type; } + numberWithChar: (char)char_; + numberWithShort: (short)short_; + numberWithInt: (int)int_; + numberWithLong: (long)long_; + numberWithUChar: (unsigned char)uchar; + numberWithUShort: (unsigned short)ushort; + numberWithUInt: (unsigned int)uint; + numberWithULong: (unsigned long)ulong; + numberWithInt8: (int8_t)int8; + numberWithInt16: (int16_t)int16; + numberWithInt32: (int32_t)int32; + numberWithInt64: (int64_t)int64; + numberWithUInt8: (uint8_t)uint8; + numberWithUInt16: (uint16_t)uint16; + numberWithUInt32: (uint32_t)uint32; + numberWithUInt64: (uint64_t)uint64; + numberWithSize: (size_t)size; + numberWithSSize: (ssize_t)ssize; + numberWithIntMax: (intmax_t)intmax; + numberWithUIntMax: (uintmax_t)uintmax; + numberWithPtrDiff: (ptrdiff_t)ptrdiff; + numberWithIntPtr: (intptr_t)intptr; + numberWithFloat: (float)float_; + numberWithDouble: (double)double_; - initWithChar: (char)char_; - initWithShort: (short)short_; - initWithInt: (int)int_; - initWithLong: (long)long_; - initWithUChar: (unsigned char)uchar; - initWithUShort: (unsigned short)ushort; - initWithUInt: (unsigned int)uint; - initWithULong: (unsigned long)ulong; - initWithInt8: (int8_t)int8; - initWithInt16: (int16_t)int16; - initWithInt32: (int32_t)int32; - initWithInt64: (int64_t)int64; - initWithUInt8: (uint8_t)uint8; - initWithUInt16: (uint16_t)uint16; - initWithUInt32: (uint32_t)uint32; - initWithUInt64: (uint64_t)uint64; - initWithSize: (size_t)size; - initWithSSize: (ssize_t)ssize; - initWithIntMax: (intmax_t)intmax; - initWithUIntMax: (uintmax_t)uintmax; - initWithPtrDiff: (ptrdiff_t)ptrdiff; - initWithIntPtr: (intptr_t)intptr; - initWithFloat: (float)float_; - initWithDouble: (double)double_; - (enum of_number_type)type; - (char)asChar; - (short)asShort; - (int)asInt; - (long)asLong; - (unsigned char)asUChar; - (unsigned short)asUShort; - (unsigned int)asUInt; - (unsigned long)asULong; - (int8_t)asInt8; - (int16_t)asInt16; - (int32_t)asInt32; - (int64_t)asInt64; - (uint8_t)asUInt8; - (uint16_t)asUInt16; - (uint32_t)asUInt32; - (uint64_t)asUInt64; - (size_t)asSize; - (ssize_t)asSSize; - (intmax_t)asIntMax; - (uintmax_t)asUIntMax; - (ptrdiff_t)asPtrDiff; - (intptr_t)asIntPtr; - (float)asFloat; - (double)asDouble; - add: (OFNumber*)num; - subtract: (OFNumber*)num; - multiplyWith: (OFNumber*)num; - divideBy: (OFNumber*)num; - increase; - decrease; @end