Overview
Comment: | OFNumber: Implement OFComparing. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
56df9c44de1f8d5ca478a078d6fde012 |
User & Date: | js on 2012-09-09 14:36:07 |
Other Links: | manifest | tags |
Context
2012-09-09
| ||
14:36 | Add OFSortedList. check-in: c0f28cf861 user: js tags: trunk | |
14:36 | OFNumber: Implement OFComparing. check-in: 56df9c44de user: js tags: trunk | |
14:14 | Fix -[OFNumber isEqual:]. check-in: b791e6fcc4 user: js tags: trunk | |
Changes
Modified src/OFConstantString.m from [e519860738] to [ed50b3697e].
︙ | ︙ | |||
254 255 256 257 258 259 260 | { [self finishInitialization]; return [self mutableCopy]; } /* From protocol OFComparing */ | | | 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 | { [self finishInitialization]; return [self mutableCopy]; } /* From protocol OFComparing */ - (of_comparison_result_t)compare: (id <OFComparing>)object { [self finishInitialization]; return [self compare: object]; } /* From OFObject, but reimplemented in OFString */ |
︙ | ︙ |
Modified src/OFDataArray.m from [aae2d470af] to [0d47039615].
︙ | ︙ | |||
376 377 378 379 380 381 382 | return NO; if (memcmp([otherDataArray cArray], data, count * itemSize)) return NO; return YES; } | | | | 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 | return NO; if (memcmp([otherDataArray cArray], data, count * itemSize)) return NO; return YES; } - (of_comparison_result_t)compare: (id <OFComparing>)object { OFDataArray *otherDataArray; int comparison; size_t otherCount, minimumCount; if (![object isKindOfClass: [OFDataArray class]]) @throw [OFInvalidArgumentException exceptionWithClass: [self class] selector: _cmd]; otherDataArray = (OFDataArray*)object; if ([otherDataArray itemSize] != itemSize) @throw [OFInvalidArgumentException exceptionWithClass: [self class] selector: _cmd]; otherCount = [otherDataArray count]; |
︙ | ︙ |
Modified src/OFNumber.h from [bb4111628a] to [3edba1d1a0].
︙ | ︙ | |||
59 60 61 62 63 64 65 | OF_NUMBER_FLOAT = 0x20, OF_NUMBER_DOUBLE = 0x40 | OF_NUMBER_FLOAT, } of_number_type_t; /** * \brief Provides a way to store a number in an object. */ | | > | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | OF_NUMBER_FLOAT = 0x20, OF_NUMBER_DOUBLE = 0x40 | OF_NUMBER_FLOAT, } of_number_type_t; /** * \brief Provides a way to store a number in an object. */ @interface OFNumber: OFObject <OFCopying, OFComparing, OFSerialization, OFJSONRepresentation> { union of_number_value { BOOL bool_; signed char char_; signed short short_; signed int int_; signed long long_; |
︙ | ︙ |
Modified src/OFNumber.m from [494724f548] to [e4b0bb2ae2].
︙ | ︙ | |||
933 934 935 936 937 938 939 940 941 942 943 944 945 946 | return ([number doubleValue] == [self doubleValue]); if (type & OF_NUMBER_SIGNED || number->type & OF_NUMBER_SIGNED) return ([number intMaxValue] == [self intMaxValue]); return ([number uIntMaxValue] == [self uIntMaxValue]); } - (uint32_t)hash { uint32_t hash; uint8_t i; switch (type) { | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 | return ([number doubleValue] == [self doubleValue]); if (type & OF_NUMBER_SIGNED || number->type & OF_NUMBER_SIGNED) return ([number intMaxValue] == [self intMaxValue]); return ([number uIntMaxValue] == [self uIntMaxValue]); } - (of_comparison_result_t)compare: (id)object { OFNumber *number; if (![object isKindOfClass: [OFNumber class]]) @throw [OFInvalidArgumentException exceptionWithClass: [self class]]; number = object; if (type & OF_NUMBER_FLOAT || number->type & OF_NUMBER_FLOAT) { double double1 = [self doubleValue]; double double2 = [number doubleValue]; if (double1 > double2) return OF_ORDERED_DESCENDING; if (double1 < double2) return OF_ORDERED_ASCENDING; return OF_ORDERED_SAME; } else if (type & OF_NUMBER_SIGNED || number->type & OF_NUMBER_SIGNED) { intmax_t int1 = [self intMaxValue]; intmax_t int2 = [number intMaxValue]; if (int1 > int2) return OF_ORDERED_DESCENDING; if (int1 < int2) return OF_ORDERED_ASCENDING; return OF_ORDERED_SAME; } else { uintmax_t uint1 = [self uIntMaxValue]; uintmax_t uint2 = [number uIntMaxValue]; if (uint1 > uint2) return OF_ORDERED_DESCENDING; if (uint1 < uint2) return OF_ORDERED_ASCENDING; return OF_ORDERED_SAME; } } - (uint32_t)hash { uint32_t hash; uint8_t i; switch (type) { |
︙ | ︙ |
Modified src/OFObject.h from [add59de5c9] to [65abbe11ec].
︙ | ︙ | |||
638 639 640 641 642 643 644 | @protocol OFComparing <OFObject> /** * \brief Compares the object with another object. * * \param object An object to compare the object to * \return The result of the comparison */ | | | 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 | @protocol OFComparing <OFObject> /** * \brief Compares the object with another object. * * \param object An object to compare the object to * \return The result of the comparison */ - (of_comparison_result_t)compare: (id <OFComparing>)object; @end #import "OFObject+Serialization.h" #ifdef __cplusplus extern "C" { #endif |
︙ | ︙ |
Modified src/OFString.m from [0e4634027e] to [72e4d9a7ba].
︙ | ︙ | |||
1137 1138 1139 1140 1141 1142 1143 | } - mutableCopy { return [[OFMutableString alloc] initWithString: self]; } | | | | 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 | } - mutableCopy { return [[OFMutableString alloc] initWithString: self]; } - (of_comparison_result_t)compare: (id <OFComparing>)object { void *pool; OFString *otherString; const of_unichar_t *unicodeString, *otherUnicodeString; size_t i, minimumLength; if (object == self) return OF_ORDERED_SAME; if (![object isKindOfClass: [OFString class]]) @throw [OFInvalidArgumentException exceptionWithClass: [self class] selector: _cmd]; otherString = (OFString*)object; minimumLength = ([self length] > [otherString length] ? [otherString length] : [self length]); pool = objc_autoreleasePoolPush(); unicodeString = [self unicodeString]; otherUnicodeString = [otherString unicodeString]; |
︙ | ︙ |
Modified src/OFString_UTF8.m from [743848703f] to [de39f05b50].
︙ | ︙ | |||
688 689 690 691 692 693 694 | if (strcmp(s->cString, [otherString UTF8String])) return NO; return YES; } | | | | 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 | if (strcmp(s->cString, [otherString UTF8String])) return NO; return YES; } - (of_comparison_result_t)compare: (id <OFComparing>)object { OFString *otherString; size_t otherCStringLength, minimumCStringLength; int compare; if (object == self) return OF_ORDERED_SAME; if (![object isKindOfClass: [OFString class]]) @throw [OFInvalidArgumentException exceptionWithClass: [self class] selector: _cmd]; otherString = (OFString*)object; otherCStringLength = [otherString UTF8StringLength]; minimumCStringLength = (s->cStringLength > otherCStringLength ? otherCStringLength : s->cStringLength); if ((compare = memcmp(s->cString, [otherString UTF8String], minimumCStringLength)) == 0) { if (s->cStringLength > otherCStringLength) |
︙ | ︙ |