Differences From Artifact [7dc3a8f62d]:
- File src/OFNumber.m — part of check-in [a0a5ecf01f] at 2009-12-06 00:27:10 on branch trunk — Remove two method implementations not used anymore. (user: js, size: 13949) [annotate] [blame] [check-ins using]
To Artifact [ffc72bea33]:
- File
src/OFNumber.m
— part of check-in
[b91a8283fe]
at
2010-03-05 11:52:18
on branch 0.2
— Merge a few changesets from the default branch into the 0.2 branch.
Changesets:
* b95fcaa6d694
* 804c68d222b4
* da8cd738da3d
* 1109d5ce3419
* d03f5c1ca95d
* 2a7017722165
* 4fccdc79eeb7
* d228149fbc04
* 8782d412a4a6 (user: js, size: 15277) [annotate] [blame] [check-ins using]
1 | /* | | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /* * Copyright (c) 2008 - 2010 * Jonathan Schleifer <js@webkeks.org> * * All rights reserved. * * This file is part of ObjFW. 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 "config.h" #import "OFNumber.h" #import "OFExceptions.h" #import "OFMacros.h" #define RETURN_AS(t) \ switch (type) { \ case OF_NUMBER_CHAR: \ return (t)value.char_; \ case OF_NUMBER_SHORT: \ return (t)value.short_; \ |
︙ | ︙ | |||
63 64 65 66 67 68 69 | case OF_NUMBER_FLOAT: \ return (t)value.float_; \ case OF_NUMBER_DOUBLE: \ return (t)value.double_; \ default: \ @throw [OFInvalidFormatException newWithClass: isa]; \ } | | | > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < > | < | | | < | < | < | < | < | < | < | < | < | < | < | < | < | < | < | < | < | < | < | < | < | < | < | < | 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, n) \ switch (type) { \ case OF_NUMBER_CHAR: \ return [OFNumber numberWithChar: \ value.char_ o [n asChar]]; \ case OF_NUMBER_SHORT: \ return [OFNumber numberWithShort: \ value.short_ o [n asShort]]; \ case OF_NUMBER_INT: \ return [OFNumber numberWithInt: \ value.int_ o [n asInt]]; \ case OF_NUMBER_LONG: \ return [OFNumber numberWithLong: \ value.long_ o [n asLong]]; \ case OF_NUMBER_UCHAR: \ return [OFNumber numberWithUChar: \ value.uchar o [n asUChar]]; \ case OF_NUMBER_USHORT: \ return [OFNumber numberWithUShort: \ value.ushort o [n asUShort]]; \ case OF_NUMBER_UINT: \ return [OFNumber numberWithUInt: \ value.uint o [n asUInt]]; \ case OF_NUMBER_ULONG: \ return [OFNumber numberWithULong: \ value.ulong o [n asULong]]; \ case OF_NUMBER_INT8: \ return [OFNumber numberWithInt8: \ value.int8 o [n asInt8]]; \ case OF_NUMBER_INT16: \ return [OFNumber numberWithInt16: \ value.int16 o [n asInt16]]; \ case OF_NUMBER_INT32: \ return [OFNumber numberWithInt32: \ value.int32 o [n asInt32]]; \ case OF_NUMBER_INT64: \ return [OFNumber numberWithInt64: \ value.int64 o [n asInt64]]; \ case OF_NUMBER_UINT8: \ return [OFNumber numberWithUInt8: \ value.uint8 o [n asUInt8]]; \ case OF_NUMBER_UINT16: \ return [OFNumber numberWithUInt16: \ value.uint16 o [n asUInt16]]; \ case OF_NUMBER_UINT32: \ return [OFNumber numberWithUInt32: \ value.uint32 o [n asUInt32]]; \ case OF_NUMBER_UINT64: \ return [OFNumber numberWithUInt64: \ value.uint64 o [n asUInt64]]; \ case OF_NUMBER_SIZE: \ return [OFNumber numberWithSize: \ value.size o [n asSize]]; \ case OF_NUMBER_SSIZE: \ return [OFNumber numberWithSSize: \ value.ssize o [n asSSize]]; \ case OF_NUMBER_INTMAX: \ return [OFNumber numberWithIntMax: \ value.intmax o [n asIntMax]]; \ case OF_NUMBER_UINTMAX: \ return [OFNumber numberWithUIntMax: \ value.uintmax o [n asUIntMax]]; \ case OF_NUMBER_PTRDIFF: \ return [OFNumber numberWithPtrDiff: \ value.ptrdiff o [n asPtrDiff]]; \ case OF_NUMBER_INTPTR: \ return [OFNumber numberWithIntPtr: \ value.intptr o [n asIntPtr]]; \ case OF_NUMBER_FLOAT: \ return [OFNumber numberWithFloat: \ value.float_ o [n asFloat]]; \ case OF_NUMBER_DOUBLE: \ return [OFNumber numberWithDouble: \ value.double_ o [n asDouble]]; \ default: \ @throw [OFInvalidFormatException newWithClass: isa]; \ } #define CALCULATE2(o) \ switch (type) { \ case OF_NUMBER_CHAR: \ return [OFNumber numberWithChar: value.char_ o]; \ case OF_NUMBER_SHORT: \ return [OFNumber numberWithShort: value.short_ o]; \ case OF_NUMBER_INT: \ return [OFNumber numberWithInt: value.int_ o]; \ case OF_NUMBER_LONG: \ return [OFNumber numberWithLong: value.long_ o]; \ case OF_NUMBER_UCHAR: \ return [OFNumber numberWithUChar: value.uchar o]; \ case OF_NUMBER_USHORT: \ return [OFNumber numberWithUShort: value.ushort o]; \ case OF_NUMBER_UINT: \ return [OFNumber numberWithUInt: value.uint o]; \ case OF_NUMBER_ULONG: \ return [OFNumber numberWithULong: value.ulong o]; \ case OF_NUMBER_INT8: \ return [OFNumber numberWithInt8: value.int8 o]; \ case OF_NUMBER_INT16: \ return [OFNumber numberWithInt16: value.int16 o]; \ case OF_NUMBER_INT32: \ return [OFNumber numberWithInt32: value.int32 o]; \ case OF_NUMBER_INT64: \ return [OFNumber numberWithInt64: value.int64 o]; \ case OF_NUMBER_UINT8: \ return [OFNumber numberWithUInt8: value.uint8 o]; \ case OF_NUMBER_UINT16: \ return [OFNumber numberWithUInt16: value.uint16 o]; \ case OF_NUMBER_UINT32: \ return [OFNumber numberWithUInt32: value.uint32 o]; \ case OF_NUMBER_UINT64: \ return [OFNumber numberWithUInt64: value.uint64 o]; \ case OF_NUMBER_SIZE: \ return [OFNumber numberWithSize: value.size o]; \ case OF_NUMBER_SSIZE: \ return [OFNumber numberWithSSize: value.ssize o]; \ case OF_NUMBER_INTMAX: \ return [OFNumber numberWithIntMax: value.intmax o]; \ case OF_NUMBER_UINTMAX: \ return [OFNumber numberWithUIntMax: value.uintmax o]; \ case OF_NUMBER_PTRDIFF: \ return [OFNumber numberWithPtrDiff: value.ptrdiff o]; \ case OF_NUMBER_INTPTR: \ return [OFNumber numberWithIntPtr: value.intptr o]; \ case OF_NUMBER_FLOAT: \ return [OFNumber numberWithFloat: value.float_ o]; \ case OF_NUMBER_DOUBLE: \ return [OFNumber numberWithDouble: value.double_ o]; \ default: \ @throw [OFInvalidFormatException newWithClass: isa]; \ } @implementation OFNumber + numberWithChar: (char)char_ { |
︙ | ︙ | |||
754 755 756 757 758 759 760 | @throw [OFInvalidArgumentException newWithClass: isa selector: _cmd]; } } - (uint32_t)hash { | > > > > > > > > > > > > > > > > > > > | > | < | < | < | < | < | < | 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 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 | @throw [OFInvalidArgumentException newWithClass: isa selector: _cmd]; } } - (uint32_t)hash { uint32_t hash; size_t i; switch (type) { case OF_NUMBER_FLOAT: OF_HASH_INIT(hash); for (i = 0; i < sizeof(float); i++) OF_HASH_ADD(hash, ((char*)&value.float_)[i]); OF_HASH_FINALIZE(hash); return hash; case OF_NUMBER_DOUBLE: OF_HASH_INIT(hash); for (i = 0; i < sizeof(double); i++) OF_HASH_ADD(hash, ((char*)&value.double_)[i]); OF_HASH_FINALIZE(hash); return hash; default: return [self asUInt32]; } } - add: (OFNumber*)num { CALCULATE(+, num) } - subtract: (OFNumber*)num { CALCULATE(-, num) } - multiplyWith: (OFNumber*)num { CALCULATE(*, num) } - divideBy: (OFNumber*)num { CALCULATE(/, num) } - increase { CALCULATE2(+ 1) } - decrease { CALCULATE2(- 1) } @end |